Отдельные консольные окна с подпроцессом и 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 чтобы запустить скрипт, и у каждого подпроцесса будет одна консоль

Другие вопросы по тегам