В Actual meaning of 'shell=True' in subprocess это в значительной степени говорит о том, что shell=True
- это то, от чего вы должны уклоняться.
FileNotFoundError: [WinError 2] The system cannot find the file specified
Это то, что прочит меня, что вы можете shell=True
в вашем подпроцессе вызова. Если файл не найден, это означает одну из двух вещей:
- Это не на вашем пути.
- Это не фактически файл.
Например, в Linux:
$ which echo
echo: shell built-in command
Это делает это довольно очевидно, что является не echo
файла. Это просто команда, встроенная в оболочку. Это может быть то же самое, когда дело доходит до mode
на Windows. Хотя this site кажется, что это файл MODE.COM
. Вы можете попробовать вызова что, как в
subprocess.run('MODE.COM')
Это может работать - по крайней мере, по одному из the answers, что я связан с
, ссылающегося с помощью оболочки действительно позволяет вам переменные окружения и файл globs в соответствии с обычным механизмом оболочки. В системах POSIX оболочка расширяет файлы globs до списка файлов. В Windows файл glob (например, «. «) не расширяется за счет оболочки, так или иначе (но переменные окружения в командной строке расширены cmd.exe).
Так что в вашем случае, возможно mode
не является файлом, но MODE.COM
является, и поскольку Windows имеет пятнистые отношения с корпусом, кажется, что, пройдя shell=True
, оболочка Windows с радостью принимает mode
и преобразует ее в MODE.COM
, но без нее она пытается выполнить файл с буквально именем mode
, который не работает
Возможно, вам понадобится 'shell = True'? –
@Wayne Werner Итак, я попробовал его с Popen и установил оболочку в true, и он тоже работал. У вас есть какие-то подсказки, почему это так работает? Благодаря! – FlyingLightning