2009-12-20 30 views
5

Tôi rất mới lập trình nên tôi xin lỗi trước nếu câu hỏi của tôi quá ngớ ngẩn.Tại sao mã này hoạt động khác trong Python3.1 so với Python2.6?

#!/usr/bin/python2.6 
import subprocess, time 
p=subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
for i in 'abcd': 
    p.stdin.write(str.encode(i+'\n')) 
    output=p.stdout.readline() 
    print(output) 
    time.sleep(1) 

Thực thi mã này trong Python 2.6 in các chữ a, b, c, d, mỗi dòng xuất xuất sau một giây. Đây là hành vi mong đợi. Nhưng trong thực thi Python 3.1 bị chặn tại dòng output=p.stdout.readline(). Cách sửa lỗi này cho Python 3.1?

+0

chính xác những gì sẽ xảy ra khi thực thi bị chặn? Bạn có một lỗi bạn có thể hiển thị? – Ben

+0

không phải lỗi, chỉ lời nhắc cho đầu vào; mã này được thực thi trong cửa sổ đầu cuối –

+5

Khi đoán, có thể có sự khác biệt về đệm; hiện một cái gì đó thay đổi nếu bạn thêm một cuộc gọi đến p.stdin.flush sau khi viết? –

Trả lời

3

Xuất hiện sự khác biệt trong bộ đệm. Việc thêm một cuộc gọi p.stdin.flush() đã giải quyết được sự cố. (Xem các bình luận ở trên).

Wiki cộng đồng vì tôi không xứng đáng nhận được tín dụng cho câu trả lời này, nhưng một số câu trả lời cần được đánh dấu là được chấp nhận.

[@Geo Pop: Vui lòng "chấp nhận" câu hỏi này, vì nó có vẻ đúng.]

Các vấn đề liên quan