नहीं है जब पाइप को "ओपन" (सही नाम नहीं पता) फ़ाइल से मानक इनपुट या पाइप से पढ़ने में समस्या है।आप एक पाइप से पायथन में stdin से कैसे पढ़ते हैं, जिसका कोई अंत
मैं उदाहरण के रूप में pipetest.py:
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
मैं एक कार्यक्रम है जारी है कि उत्पादन और Ctrl + ग थोड़ी देर
$ ping 127.0.0.1 | python pipetest.py
^C0
मुझे कोई आउटपुट प्राप्त होने लग जाते हैं। लेकिन अगर मैं एक साधारण फाइल के माध्यम से जाता हूं तो यह काम करता है।
$ 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
कैसे मैंने पहले कार्यक्रम, समाप्त हो जाती है इस मामले पिंग में समाप्त हो गया है किसी भी उत्पादन प्राप्त करने के लिए करते हैं?
मुझे खुशी है कि यह काम किया है, लेकिन आप निश्चित रूप से stdin' में लाइन के लिए 'उपयोग कर सकते हैं, जब तक कि आप जानते हैं, जब तक यह, read' एक लाइन खत्म होने वाली (जिसके कारण अपने संस्करण में काम करता है पाता है' यह अवरुद्ध कर देगा उस तरह ब्लॉक नहीं करता है)। – agf
मैं सुझाव नहीं दे रहा हूं कि आप अपना जवाब हटा दें, बस आखिरी पंक्ति गलत थी। मैंने "पूरी तरह गलत" टिप्पणी हटा दी क्योंकि यह गलत था - आपका प्रोग्राम सही था, बस आपका समापन बयान गलत था। मैं डाउनवॉटर नहीं हूं (मैं नहीं होगा, क्योंकि मुझे नहीं पता था कि आपका जवाब काम करेगा या नहीं)। – agf