Отдельные консольные окна с подпроцессом и Popen
Я недавно перешел с python 2.7 на python 3.4 и anaconda.
Мне пришлось внести некоторые изменения, чтобы мой код работал в 3.4, но я столкнулся с одной проблемой, которую я не уверен, вызвана ли она новой версией Python или самой Anaconda.
Перед моим переходом у меня была команда
p=subprocess.Popen('Location of .exe file')
Это работало нормально, так как он открывал мой файл.exe в другом окне / консоли, где мне приходилось вводить некоторые данные, пока программа python работала в фоновом режиме.
Теперь, когда я пытаюсь выполнить ту же команду, она находится на отдельной консоли, и я должен предоставить свой ввод в той же консоли, в которой работает моя программа на python.
Есть ли способ заставить его вернуться к тому, что было? И может кто-нибудь объяснить мне, что вызвало это изменение в первую очередь? На этом форуме было несколько предложений по этой проблеме, но пока ничего не получалось.
я ценю вашу помощь
1 ответ
Простой переход с версии 2 на 3 Python не должен иметь такой разницы.
Я думаю, что в вашей старой среде Python2.7 вы использовали Pythonw.exe
(обратите внимание на окончание w), чтобы выполнить начальный скрипт и что в вашем новом Python3 вы используете Python.exe
,
Оба вкуса существуют в обеих версиях. Разница в том, что Python.exe
это консольное приложение, а Pythonw.exe
это графический интерфейс:
- при запуске с консоли,
Python.exe
использует родительскую консоль и передает ее своим (консольным) подпроцессам - при запуске из программы с графическим интерфейсом (например, из проводника) она выделяет новую консоль - при запуске с консоли,
Pythonw.exe
игнорирует родительскую консоль, и для любого (консольного) подпроцесса будет выделена новая консоль. Но если вы попытаетесь выполнить его без сценария, он немедленно завершится, потому что у него нет стандартного ввода.
Так что просто используйте Pythonw
чтобы запустить скрипт, и у каждого подпроцесса будет одна консоль