2009-11-28 11 views
12

मुझे लगता है कि एक popen कॉल के माध्यम से एक बाहरी कार्यक्रम चलाता है एक जीयूआई के साथ एक कार्यक्रम है:एक कंसोल के बिना popen साथ pythonw में एक प्रक्रिया चल रहा है

p = subprocess.Popen("<commands>" , stdout=subprocess.PIPE , stderr=subprocess.PIPE , cwd=os.getcwd()) 
p.communicate() 

लेकिन एक सांत्वना पॉप अप होता है, मैं क्या की परवाह किए बिना (मैं फ़ाइल संभाल के लिए इसे एनयूएल पास करने का भी प्रयास किया है)। क्या बाइनरी प्राप्त किए बिना ऐसा करने का कोई तरीका है जिसे मैं अपने कंसोल को मुक्त करने के लिए कहता हूं?

+0

क्या ये आदेश सामान्यतः कंसोल में चलेंगे? क्या आप एक और जीयूआई प्रोग्राम चलाने की कोशिश कर रहे हैं जिसमें कंसोल नहीं है? –

उत्तर

24

here से:

import subprocess 

def launchWithoutConsole(command, args): 
    """Launches 'command' windowless and waits until finished""" 
    startupinfo = subprocess.STARTUPINFO() 
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
    return subprocess.Popen([command] + args, startupinfo=startupinfo).wait() 

if __name__ == "__main__": 
    # test with "pythonw.exe" 
    launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"]) 
+0

आह! धन्यवाद। मैंने उस विकल्प को भी ध्यान में नहीं देखा ... – sbirch

2

आप सक्षम हो सकता है सिर्फ subprocess.Popen([command], shell=False) क्या करना है।

वैसे भी मैं वैसे भी उपयोग करता हूं। झंडे और क्या नहीं सेट करने के सभी बकवास बचाता है। एक बार .pyw के रूप में नामित किया गया है या pythonw के साथ चलाया जाना चाहिए इसे कंसोल नहीं खोलना चाहिए।

+0

खोल = गलत पहले से ही डिफ़ॉल्ट है, इसलिए मुझे नहीं पता कि यह ठीक करने जा रहा है: https://docs.python.org/2/library/subprocess .html # subprocess.Popen – totaam

+1

'shell = गलत 'कुछ भी नहीं बदलेगा, समाधान' shell = True' का उपयोग '.pyw' फ़ाइल के साथ करना है। – ZeroFunter

1

सिर्फ subprocess.Popen([command], shell=True)

+0

क्या 'pyw' फ़ाइल? उसे एक बाहरी आवेदन चलाने की जरूरत है। –

+0

यह एक आकर्षण की तरह काम करता है। आपको '.pyw' फ़ाइल की आवश्यकता नहीं है। – vy32

0

यह win32api में अच्छी तरह से काम करता है है। अन्य समाधान मेरे लिए काम नहीं कर रहे थे।

import win32api 
chrome = "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"" 
args = "https://stackoverflow.com" 

win32api.WinExec(chrome + " " + args) 
संबंधित मुद्दे