Я возился с subprocess.Popen
и попал в странную ситуацию, которую я просто не могу объяснить. Оставляя здесь, в надежде, что кто-то сможет понять это.
Описание
Создание подпроцесса cmd.exe
из процесса python приводит к быстрому переключению с python на cmd. И когда отображается приглашение python, команда выполняется в cmd.exe
. С другой стороны, когда отображается приглашение cmd.exe
, ввод команды выполняется в оболочке python.
Получение этого странного запроса туда-сюда. Пример выглядит следующим образом:
Microsoft Windows [Version 10.0.17134.829]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\Pedro Rodrigues>help
Type help() for interactive help, or help(object) for help about object.
>>>
Видимо, командная строка Windows. Но не только команда help
является командой python, после чего мы, кажется, попадаем в оболочку python.
Но, если мы сделаем это снова. На самом деле все наоборот. Теперь это командная строка Windows, но нам предоставляется приглашение python!
>>> help
For more information on a specific command, type HELP command-name
ASSOC Displays or modifies file extension associations.
... supressed ...
WMIC Displays WMI information inside interactive command shell.
For more information on tools see the command-line reference in the online help.
C:\Users\Pedro Rodrigues>
И это продолжается, насколько я могу сказать, терминал на данный момент практически бесполезен.
Шаги для воспроизведения
Откройте оболочку python:
- Откройте командную строку и введите
python
. - Откройте оболочку Python.
Запустите следующий код:
import subprocess
subprocess.Popen('cmd.exe')
- Тип
help
, нажмитеENTER
. - Повторите предыдущий шаг.
Что происходит?
Я удивлен результатом. С учетом сказанного я просто не могу объяснить, что здесь происходит.
В Linux
Поведение немного отличается, хотя оно также делает терминал бесполезным. Я не много играл с ним в Linux, но в действительности несколько раз получал работающий терминал.
import subprocess
subprocess.Popen('/bin/bash')
Но в большинстве случаев получал рабочую оболочку bash. Который останавливал процесс Python каждый раз.
Я понимаю, что это эзотерический сценарий, но то, что происходит в Windows, озадачивает меня.