I have some Python code that works correctly when I use python.exe to run it, but fails if I use 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()
The message I get is:
Exception thrown: [Error 6] The handle is invalid
However, if I don’t specify the ‘stdout’ parameter, subprocess.call() starts okay.
I can see that pythonw.exe might be redirecting output itself, but I can’t see why I’m blocked from specifying stdout for a new thread.
sys.stdinandsys.stdouthandles are invalid because pythonw does not provide console support as it runs as a deamon, so default arguments ofsubprocess.call()are failing.Deamon programs close stdin/stdout/stderr purposedly and use logging instead, so that you have to manage this yourself: I would suggest to use subprocess.PIPE.
If you really don’t care about what the sub process says for errors and all, you could use
os.devnull(I’m not really sure how portable it is?) but I wouldn’t recommend that.