2010-08-02 8 views
5

संभव डुप्लिकेट:
Running a process in pythonw with Popen without a consoleमैं पायथन (2.7) में उत्पन्न प्रक्रियाओं से विंडोज कंसोल को कैसे हटा सकता हूं?

मैं विंडोज पर अजगर 2.7 का उपयोग कर रहा बैच रॉ DCRaw और जनहित याचिका का उपयोग करके रूपांतरण स्वचालित करने के लिए।

समस्या यह है कि जब भी मैं dcraw चलाता हूं (जो प्रत्येक सेकेंड सेकेंड होता है) मैं विंडोज कंसोल खोलता हूं। यदि मैं एक .py के रूप में स्क्रिप्ट चलाता हूं तो यह कम परेशान होता है क्योंकि यह केवल मुख्य विंडो खुलता है, लेकिन मैं केवल जीयूआई प्रस्तुत करना पसंद करूंगा।

मैं इतना है कि यह शामिल है:

args = [this.dcraw] + shlex.split(DCRAW_OPTS) + [rawfile] 
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE) 
ppm_data, err = proc.communicate() 
image = Image.open(StringIO.StringIO(ppm_data)) 

धन्यवाद रिकार्डो रेयेस को

कि नुस्खा में होने वाले मामूली संशोधन, 2.7 में ऐसा लगता है कि आप _subprocess से STARTF_USESHOWWINDOW (प्राप्त करने की आवश्यकता आप pywin32 का भी उपयोग कर सकते हैं यदि आप ऐसा कुछ चाहते हैं जो बदलने के लिए थोड़ा कम प्रवण हो), तो पोस्टरिटी के लिए:

suinfo = subprocess.STARTUPINFO() 
suinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW 
proc = subprocess.Popen(args, -1, stdout=subprocess.PIPE, startupinfo=suinfo) 

उत्तर

6

पॉपन को कॉल करते समय आपको startupinfo पैरामीटर सेट करने की आवश्यकता है।

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"]) 
:

यहाँ एक Activestate.com Recipe से एक उदाहरण है