2011-08-18 6 views
13

मैं उपप्रक्रिया का उपयोग करता है एक अजगर स्क्रिप्ट है:विंडोज बनाम चल अजगर blah.py सीधे .py चल अलग ढंग से व्यवहार करती है

import subprocess 
print "Running stuff" 
subprocess.check_call(["do_stuff.bat"]) 
print "Stuff run" 

यदि यह blah.py नामित किया गया था, और मैं (एक कमांड प्रॉम्प्ट से) चलाने :

python blah.py 

मुझे do_stuff.bat (या जो भी मैं चलाता हूं) से आउटपुट प्राप्त करूंगा।

इस रूप में चलाया जाता है:

blah.py 

तब मैं do_stuff.bat से उत्पादन, केवल प्रिंट बयान नहीं मिलता है।

अब तक विंडोज सर्वर 2003 पर देखा गया है। पायथन संस्करण 2.5.2 (विभिन्न कारणों से वहां अटक गया)।

Python.File = "C: \ Python25 \ python.exe" "% 1"% *

तो किसी को भी अंतर की व्याख्या कर सकते जुड़े फ़ाइल प्रकार कार्रवाई मैं देख रहा हूँ पर देख रहे हैं?

+1

मैं एक अनुमान खतरे और कहते हैं कि स्पष्ट रूप से बुला अजगर सिर्फ फ़ाइल बुला जबकि टर्मिनल मानक बाहर बनाता हैं पाइप मानक कहीं और बाहर। मैं इस झुकाव की पुष्टि नहीं कर सकता। – Exelian

+0

विंडोज 7 64 बिट चलने पर एक बैच से पाइथन 2.6.6 आउटपुट को blah.py को कॉल करने के बाद स्क्रीन पर मुद्रित किया जाता है। – Helbreder

+0

मेरी विंडोज 7 32 बिट चलने पर पाइथन 2.6.6 इसे पुन: उत्पन्न नहीं कर सकता है। –

उत्तर

1

मुझे थ्रेड का उपयोग करने में आम समस्या थी, लेकिन मेरा पूरा कोड पायथन में था। थ्रेड प्रिंट का उपयोग कर मानक आउटपुट पर नहीं लिख सकते हैं। बस मुख्य धागा ऐसा कर सकता था। मैं इस

import sys 
sys.stdout.write("this was printed by thread") 

मुझे पता है कि शायद यह अभ्यस्त बल्ला फ़ाइल के साथ तुम्हारी मदद की तरह somethnig इस्तेमाल किया ...

+0

यह दिलचस्प है और शायद उपप्रोसेस कामों के तरीके पर असर पड़ता है - यह समस्या को हल नहीं करेगा, लेकिन संबंधित है। –

+2

* प्रिंट का उपयोग कर मानक आउटपुट पर थ्रेड नहीं लिख सकते हैं * आप ऐसा क्यों सोचते हैं? –

संबंधित मुद्दे