Ctrl + D có hiệu ứng lạ. Nó không đóng luồng đầu vào, nhưng chỉ gây ra mức C fread()
để trả lại kết quả trống. Đối với các tệp thông thường, kết quả có nghĩa là tệp hiện đang ở cuối tệp nhưng có thể chấp nhận được để đọc thêm, ví dụ: để kiểm tra xem liệu có ai đó đã ghi thêm dữ liệu vào tệp trong thời gian chờ đợi hay không.
Ngoài ra, có vấn đề về đệm --- ba cấp độ trong số đó!
Lặp lại của Python qua tệp sẽ chặn chặn. Tránh nó đọc từ các luồng tương tác.
tệp stdin cấp C có, theo mặc định, một bộ đệm dòng.
nhà ga chính (!), Trong chế độ mặc định của nó ("Chế độ nấu chín"), đọc một dòng dữ liệu trước khi gửi nó đến quá trình, điều này giải thích tại sao gõ Ctrl +D không có bất kỳ hiệu ứng nào khi gõ vào giữa một dòng.
Ví dụ này tránh được vấn đề đầu tiên, đó là tất cả các bạn cần nếu tất cả các bạn muốn là phát hiện Ctrl + D gõ như một dòng riêng:
import sys
while True:
line = sys.stdin.readline()
print repr(line)
Bạn nhận được tất cả phù hợp với số '\n'
cuối cùng, ngoài khi "dòng" xuất phát từ một số Ctrl + D, trong trường hợp này, bạn chỉ nhận được ''
(nhưng vẫn tiếp tục đọc, trừ khi tất nhiên chúng tôi thêm if line == '': break
).
Nguồn
2013-03-27 20:29:44
Bạn đang sử dụng trình bao nào? – squiguy
Ồ, và bạn cần nhập 'CTRL-D' hai lần. –
Và nhập 'CTRL-D' hai lần không hoạt động. –