मैं एक पाइथन स्क्रिप्ट लिख रहा हूं जो उपप्रोकस का उपयोग करता है। दो प्रोग्राम (संकलित सी कोड से) को निष्पादित करने के लिए खोलें जो प्रत्येक स्टडआउट उत्पन्न करते हैं। स्क्रिप्ट उस आउटपुट को प्राप्त करती है और इसे फ़ाइल में सहेजती है। चूंकि आउटपुट कभी-कभी सबप्रोसेस को खत्म करने के लिए काफी बड़ा होता है। पीआईपीई, जिससे स्क्रिप्ट लटकती है, मैं सीधे लॉग फ़ाइल में stdout भेजता हूं। मैं अपनी स्क्रिप्ट को फ़ाइल की शुरुआत और अंत में और दो उपप्रोसेस के बीच कुछ लिखना चाहता हूं। कॉलन कॉल करें। हालांकि, जब मैं अपनी लॉग फ़ाइल को देखता हूं, तो स्क्रिप्ट से लॉग फ़ाइल में जो भी लिखा गया है, वह सब फाइल के शीर्ष पर एक साथ है, उसके बाद सभी निष्पादन योग्य स्टडआउट। मैं अपने अतिरिक्त टेक्स्ट को फ़ाइल में कैसे जोड़ सकता हूं?subprocess.Popen से stdout को सहेजना, फ़ाइल में अधिक सामग्री लिखना
def run(cmd, logfile):
p = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=logfile)
return p
def runTest(path, flags, name):
log = open(name, "w")
print >> log, "Calling executable A"
a_ret = run(path + "executable_a_name" + flags, log)
print >> log, "Calling executable B"
b_ret = run(path + "executable_b_name" + flags, log)
print >> log, "More stuff"
log.close()
लॉग फ़ाइल है: कॉलिंग निष्पादन एक निष्पादन बी कॉलिंग अधिक सामान [... दोनों निष्पादनयोग्य से stdout ...]
वहाँ एक रास्ता मैं करने के लिए एक के stdout फ्लश कर सकते हैं पॉपन को बुलाए जाने के बाद लॉग, उदाहरण के लिए? एक और चीज जो प्रासंगिक हो सकती है: निष्पादन योग्य ए शुरू होता है तो बी पर पेंड करता है, और बी के बाद सामान प्रिंट और खत्म हो जाता है, फिर ए और अधिक सामान प्रिंट करता है और समाप्त होता है।
मैं आरएचई लिनक्स पर पायथन 2.4 का उपयोग कर रहा हूं।
जब मैंने stdout = subprocess.PIPE का उपयोग किया था और बाहरी लूप लॉग फ़ाइल में सबकुछ लिखता था, तो मैं एक्जिक्यूटिव के आउटपुट के साथ अपना टेक्स्ट लिखने में सक्षम था। जब मैं कोई पाठ नहीं जोड़ता, लॉग में इस क्रम में सामग्री होती है: 1) आउटपुट 2) बी आउटपुट 3) ए आउटपुट के बाकी। मैं उन चरणों में से पहले या बाद में पाठ जोड़ सकता था। अब मैं केवल लॉग के प्रारंभ या अंत में टेक्स्ट जोड़ सकता हूं। पॉपन के बाद एक प्रतीक्षा() जोड़ना स्क्रिप्ट को लटकता है क्योंकि बी एक खत्म होने तक शुरू नहीं होता है, जो यह नहीं करेगा, क्योंकि ए बी से हैंडशेकिंग की प्रतीक्षा करता है। क्या इस दृष्टिकोण के साथ लॉग में अपना खुद का टेक्स्ट इंटरल्यू करना संभव है? – jasper77