से आउटपुट कैसे एकत्र करें मैं एक पायथन प्रक्रिया बनाने की कोशिश कर रहा हूं जो कुछ इनपुट पढ़ता है, इसे संसाधित करता है और परिणाम प्रिंट करता है। प्रसंस्करण एक उपप्रोसेसर (स्टैनफोर्ड के एनईआर) द्वारा किया जाता है, उदाहरण के लिए मैं 'बिल्ली' का उपयोग करूंगा। मुझे नहीं पता कि एनईआर कितना आउटपुट देगा, इसलिए मैं इसे सब इकट्ठा करने और इसे प्रिंट करने के लिए एक अलग थ्रेड चलाता हूं। निम्नलिखित उदाहरण दिखाता है।एक पायथन उपप्रोसेसर
import sys
import threading
import subprocess
# start my subprocess
cat = subprocess.Popen(
['cat'],
shell=False, stdout=subprocess.PIPE, stdin=subprocess.PIPE,
stderr=None)
def subproc_cat():
""" Reads the subprocess output and prints out """
while True:
line = cat.stdout.readline()
if not line:
break
print("CAT PROC: %s" % line.decode('UTF-8'))
# a daemon that runs the above function
th = threading.Thread(target=subproc_cat)
th.setDaemon(True)
th.start()
# the main thread reads from stdin and feeds the subprocess
while True:
line = sys.stdin.readline()
print("MAIN PROC: %s" % line)
if not line:
break
cat.stdin.write(bytes(line.strip() + "\n", 'UTF-8'))
cat.stdin.flush()
जब मैं कीबोर्ड के साथ टेक्स्ट दर्ज करता हूं तो यह अच्छी तरह से काम करता प्रतीत होता है। हालांकि, अगर मैं अपनी स्क्रिप्ट (बिल्ली file.txt | python3 my_script.py) में पाइप इनपुट करने का प्रयास करता हूं, तो एक रेसिंग स्थिति होती है। कभी-कभी मुझे उचित आउटपुट मिलता है, कभी-कभी नहीं, कभी-कभी यह बंद हो जाता है। किसी भी सहायता की सराहना की जाएगी!
मैं उबंटू 14.04, पायथन 3.4.0 चला रहा हूं। समाधान मंच-स्वतंत्र होना चाहिए।
किसी ने मुझे एक बार कहा था कि एक अच्छा समाधान प्रदान किए बिना डबल पाइप समस्याग्रस्त है। –