파이프가 "열린"(올바른 이름을 모르는 경우) 파일 일 때 파이썬의 표준 입력 또는 파이프에서 읽는 데 문제가 있습니다.어떻게 끝나는 파이프에서 파이썬으로 파이썬에서 읽을합니까
나는이 예로 pipetest.py : 내가 가지고있는 출력 및 Ctrl + C 잠시
$ ping 127.0.0.1 | python pipetest.py
^C0
내가 더 출력을 얻을 후 계속 프로그램을 실행
import sys
import time
k = 0
try:
for line in sys.stdin:
k = k + 1
print line
except KeyboardInterrupt:
sys.stdout.flush()
pass
print k
. 그러나 일반 파일을 통해 이동하면 작동합니다.
$ ping 127.0.0.1 > testfile.txt
이 짧은 후 Ctrl 키 + C로 종료
$ cat testfile.txt | python pipetest.py
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.017 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.015 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.014 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.013 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.012 ms
--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.012/0.014/0.017/0.003 ms
10
동안 어떻게이 종료 된 프로그램이 경우 핑에 종료되기 전에 출력을 얻을합니까?
내가이 일을 기뻐하지만 당신은 확실히 너무 오래 당신이'read'을 버전이 작동하는 이유 끝나는 라인 (찾을 때까지이 차단됩니다 알고, stdin'에서 라인'사용할 수 있습니다 그런 식으로 차단하지 않습니다.) – agf
나는 당신이 당신의 대답을 삭제할 것을 제안하는 것이 아니라, 마지막 줄이 잘못되었다는 것을 제안합니다. 내가 잘못했기 때문에 "완전히 잘못된"의견을 삭제했습니다. 프로그램이 옳았으며, 귀하의 폐회사가 잘못되었습니다. 나는 downvoter 아니에요 (나는 당신의 대답이 효과가 있을지 모르겠다.). – agf