पढ़ें मुझे एक प्रोग्राम चलाने और stdout पर अपना आउटपुट इकट्ठा करने की आवश्यकता है। इस कार्यक्रम (समाज) को अजगर लिपि की अवधि के लिए पृष्ठभूमि में चलाने की जरूरत है। सोकाट एक बार चलने के बाद डेमॉन मोड में बैठता है, लेकिन पहले यह कुछ लाइनों को आउटपुट करता है कि मुझे अपनी बाकी स्क्रिप्ट की आवश्यकता है।पायथन एक डेमॉन उप-प्रक्रिया चलाएं और stdout
कमान: socat -d -d PTY: PTY:
आउटपुट:
2011/03/23 21:12:35 socat[7476] N PTY is /dev/pts/1
2011/03/23 21:12:35 socat[7476] N PTY is /dev/pts/2
2011/03/23 21:12:35 socat[7476] N starting data transfer loop with FDs [3,3] and [5,5]
...
मैं मूल रूप से है कि चलाने मेरा कार्यक्रम के शुरू में है और यह स्क्रिप्ट समाप्ति तक चल छोड़ना चाहते हैं, लेकिन मैं जरूरत पाइथन में दो/dev/pts/X नाम पढ़ने के लिए।
क्या कोई मुझे बता सकता है कि यह कैसे करें?
मैं इसके साथ आया जो बस लटकता है, मुझे लगता है क्योंकि यह बच्चे की प्रक्रिया को समाप्त करने के लिए अवरुद्ध है।
#!/usr/bin/python
from subprocess import Popen, PIPE, STDOUT
cmd = 'socat -d -d PTY: PTY: &'
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
output = p.stdout.read()
# Process the output
print(output)
किसी भी मदद
संपादित करने के लिए धन्यवाद: लगता है यह stderr करने के लिए लिख सकते हैं, लेकिन स्क्रिप्ट अभी भी बस के साथ और & भी stderr से पढ़ने के बिना hanges।
क्या यह '&' के बिना काम करता है? –
नहीं :(दुख की बात नहीं, यह बस लटकती है। – Jason
क्या आपने यह सत्यापित करने के लिए प्रिंट स्टेटमेंट में जोड़ने का प्रयास किया है कि यह आपके कॉल के बाद 'पॉपन' पर अवरुद्ध है और 'read()' कॉल पर अवरुद्ध नहीं है? – Jeff