2011-06-17 10 views
7

संभव डुप्लिकेट खोले बिना:
Running a process in pythonw with Popen without a console
How do I eliminate Windows consoles from spawned processes in Python (2.7)?अजगर से उपप्रक्रिया निष्पादित विंडोज कमान देने के लिए प्रेरित

मैं एक अजगर प्रोग्राम है जो एक अलग नंबर-क्रंचिंग कार्यक्रम कॉल (सी में लिखा) एक उपप्रोसेसर के रूप में कई बार (subprocess.check_call का उपयोग कर)। यह लिनक्स पर बहुत अच्छा काम करता है, और यह विंडोज़ पर भी बहुत अच्छा काम करता है, एक छोटी सी चीज को छोड़कर: हर बार जब यह सबप्रोसेस को कॉल करता है तो कमांड प्रॉम्प्ट विंडो बनाई जाती है और जब उपप्रोसेसर निकलता है तो जल्द ही नष्ट हो जाता है।

यह गणना को प्रभावित नहीं करता है, लेकिन यह बहुत परेशान है क्योंकि यह विंडो स्क्रीन पर चालू और बंद चमकती रहती है, और कंप्यूटर पर अन्य चीजों को करना मुश्किल हो जाता है क्योंकि नई कमांड प्रॉम्प्ट विंडो कीबोर्ड चुरा सकती है ध्यान देते हैं।

मैं बस उपप्रोसेस को निष्पादित कैसे कर सकता हूं (जिसमें कोई GUI नहीं है), और कमांड प्रॉम्प्ट विंडो को बनाए जाने से रोकें?

+1

आप खोल उपयोग कर रहे हैं = सच जब 'subprocess.check_call' बुला? यदि हाँ इसका उपयोग न करने का प्रयास करें और देखें कि व्यवहार नहीं बदला है या नहीं। – mouad

+0

देखें http://stackoverflow.com/questions/1016384/cross-platform-subprocess-with-hidden- विन्डो – JacquesB

उत्तर

0

आप subprocess.check_call() पर कैसे कॉल कर रहे हैं? यदि आप shell=True पास करते हैं तो विंडो नहीं बनाई जानी चाहिए क्योंकि इससे SW_HIDE ध्वज STARTUPINFO.wShowWindow विशेषता के लिए सेट किया जाएगा।

उदाहरण:

subprocess.check_call(["ping", "google.com"], shell=True) 
+0

यह दर्द का कुछ हद तक भी है क्योंकि यह केवल काम नहीं करता है; इसमें अब कुछ त्रुटि है क्योंकि यह पसंद नहीं है जब मैं इसे एक सापेक्ष पथ देता हूं, और यदि मैं इसे एक पूर्ण पथ देता हूं तो यह पसंद नहीं करता है क्योंकि इसमें इसकी जगह है ... –

+0

मैं बस में बस गया मैन्युअल रूप से एक STARTUPINFO। एक जादू की तरह काम किया। –

+6

कृपया 'shell = True' को समाधान के रूप में प्रचारित न करें क्योंकि यह कंसोल को छिपाने के लिए होता है। मेरा जवाब देखें [यहां] (http://stackoverflow.com/a/12964900/95735)। –

2

जब आप सी अनुप्रयोग बनाते हैं, तो कंसोल सबसिस्टम के बजाय अपने प्रकार को Win32 सबसिस्टम पर सेट करें। यदि यह एक पूर्व-निर्मित अनुप्रयोग है, तो आप उपप्रणाली को this tool के साथ बदल सकते हैं।

+0

मैं दृश्य सी ++ 2010 एक्सप्रेस में यह कैसे कर सकता हूं? –

+0

ठीक है, मैंने पाया कि लिंकर विकल्पों में से, लेकिन अब यह कहता है कि मुझे _WinMain –

+0

नामक कुछ फ़ंक्शन को परिभाषित करने की आवश्यकता है, आपको अपने 'मुख्य() 'से' WinMain()' का नाम बदलने की आवश्यकता है। फंक्शन हस्ताक्षर: http://msdn.microsoft.com/en-us/library/ff381406%28v=vs.85%29.aspx –

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