Python subprocess.call () fallisce quando si utilizza pythonw.exe


Answers

Per la cronaca, il mio codice ora si presenta così:

def runStuff(commandLine):
    outputFileName = 'somefile.txt'
    outputFile = open(outputFileName, "w")

    if guiMode:
        result = subprocess.call(commandLine, shell=True, stdout=outputFile, stderr=subprocess.STDOUT)
    else:
        proc = subprocess.Popen(commandLine, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
        proc.stdin.close()
        proc.wait()
        result = proc.returncode
        outputFile.write(proc.stdout.read())

Si noti che, a causa di un apparente bug nel modulo di sottoprocesso, la chiamata a Popen () deve specificare anche una pipe per lo stdin, che chiudiamo subito dopo.

Question

Ho un codice Python che funziona correttamente quando uso python.exe per eseguirlo, ma fallisce se uso pythonw.exe.

    def runStuff(commandLine):
        outputFileName = 'somefile.txt'
        outputFile = open(outputFileName, "w")

        try:
            result = subprocess.call(commandLine, shell=True, stdout=outputFile)
        except:
            print 'Exception thrown:', str(sys.exc_info()[1])

    myThread = threading.Thread(None, target=runStuff, commandLine=['whatever...'])
    myThread.start()

Il messaggio che ottengo è:

    Exception thrown: [Error 6] The handle is invalid

Tuttavia, se non si specifica il parametro 'stdout', subprocess.call () inizia correttamente.

Posso vedere che pythonw.exe potrebbe reindirizzare l'output stesso, ma non riesco a capire perché mi viene impedito di specificare stdout per un nuovo thread.




Links