Я хочу, чтобы иметь возможность получить содержимое на стандартный вывод и стандартный поток ошибок, когда я запускаю следующий сценарий на окнах с помощью pythonw.exe:Subprocess Popen не работает с pythonw.exe
import subprocess
import sys
import os
import string
import time
tmpdir = 'c:/temp'
cmd = 'dir c:'
tmpfile = "tmp_%f" % (time.time())
tmpfile = os.path.normpath(os.path.join(tmpdir,tmpfile))
tmpfile2 = tmpfile+".bat"
tmpfile3 = tmpfile+".txt"
fa = open(tmpfile2,'w')
fa.write("@ECHO OFF > NUL\n")
fa.write('call '+cmd+"\n")
fa.close()
wcmd = []
wcmd.append(tmpfile2)
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW
fb = open(tmpfile3,'w')
fb.write("\n")
fb.write(tmpfile2+"\n")
try:
procval = subprocess.Popen(wcmd, startupinfo=startupinfo, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()
fb.write(str(procval)+"\n")
fb.write("Sucess")
fb.close()
except:
fb.write(str(procval)+"\n")
fb.write("Failure")
fb.close()
Когда я выполнить его с помощью питона .exe Я получаю ожидаемый результат. Когда я запускаю его с помощью pythonw.exe Я заканчиваю на стороне исключения. Если я запускаю popen только с помощью команды и флаги startupinfo, команда будет успешно завершена, но не будет доступа к данным в дочерних процессах. Все, что я прочитал, говорит, что это должно работать, но должно быть что-то упустить. Любая помощь будет принята с благодарностью.
Спасибо, Рэнди
Вы случайно не зарегистрировали информацию об исключении? – jdi
Я пробовал, но не удался. Это достаточно легко, чтобы реплицировать так, чтобы любые идеи о том, как получить информацию об исключении, и дадут ему шанс – user1352650
Я не понимаю. У вас есть код, который попадает в общий, кроме блока, но вы не можете показать это исключение? Измените его на: «except Exception, e» и запишите e. Или просто поднимите в конце, чтобы вы могли видеть, что такое ошибка – jdi