2015-05-12 2 views
1

В python я использую subprocess.Popen() для запуска нескольких процессов, я хочу отлаживать эти процессы, но окна этих процессов исчезли быстро, и у меня не было возможности увидеть сообщение об ошибке. Я хотел бы знать, есть ли способ остановить окно от исчезновения или написать содержимое в окнах в файл, чтобы я мог увидеть сообщение об ошибке позже.окно подпроцесса быстро исчезает

Заранее благодарен!

ответ

3

вы можете использовать аргументы stdout и stderr для записи выходов в файл. пример:

with open("log.txt", 'a') as log: 
     proc = subprocess.Popen(['cmd', 'args'], stdout=log, stderr=log) 
0

В окнах, общий способ хранения CMD окон, открытых после окончания процесса консоли заключается в использовании cmd /k

Примера: в CMD окна, набрав start cmd /k echo foo

  • открылось в новом окне (за start)
  • отображает выходные данные foo
  • Оставьте командное окно открытым
+0

Экранирование команд для прохождения через cmd.exe может быть затруднено и (AFAICT) даже иногда невозможно. Если python.exe доступен, я бы использовал это вместо этого. Предполагая, что командная строка или список находится в 'args', вы можете использовать следующее:' python = sys.executable.replace ('pythonw.exe', 'python.exe'); '' subprocess.call ([python, ' -i ',' -c ',' import subprocess; rc = subprocess.call (% r) '% args], creationflags = subprocess.CREATE_NEW_CONSOLE) '. Новое окно консоли останется открытым в REPL Python. – eryksun

+0

@eryksun: API CreateProcess знает только исполняемый файл и одну строку командной строки (LPCTSTR), поэтому экранирование обычно не является реальной проблемой в Windows. Но я думаю, что ваш метод кажется действительно приятным, и вы можете сделать ответ –

+0

cmd.exe разбирает командную строку перед вызовом 'CreateProcess' или' ShellExecuteEx' - для чего он может совершать несколько вызовов, если он токенизирует командную строку в выполнение нескольких команд. – eryksun

Смежные вопросы