Мой рабочий компьютер Windows 10, Python 3.7.3.
Сам файл Python, test.py
, очень прост:
import subprocess
subprocess.call("echo foo")
Но он не запускается (Windows командная строка или встроенный терминал VS Code):
(chemistry) some/path> python test.py
Traceback (most recent call last):
File "some/path/test.py", line 2, in <module>
subprocess.call("echo foo")
File "C:\Users\me\AppData\Local\Continuum\anaconda3\envs\chemistry\lib\subprocess.py", line 323, in call
with Popen(*popenargs, **kwargs) as p:
File "C:\Users\me\AppData\Local\Continuum\anaconda3\envs\chemistry\lib\subprocess.py", line 775, in __init__
restore_signals, start_new_session)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\envs\chemistry\lib\subprocess.py", line 1178, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] Le fichier spécifié est introuvable
(последняя строка - это французская версия FileNotFoundError: [WinError 2] The system cannot find the file specified
.)
Я заменил команда echo foo
на dir
и exit 1
(все они выполняются, как ожидалось, в командной строке Windows), и ошибка каждый раз одинакова. Использование subprocess.call(["echo", "foo"])
делает то же самое.
Версия оболочки subprocess.call("echo foo", shell=True)
работает так, как ожидалось, но, очевидно, это плохая практика с точки зрения безопасности; кроме того, я не понимаю, почему здесь может понадобиться аргумент оболочки, а ошибка отличается от ошибки, полученной, например, в Python Подпроцесс: команда не работает в Python, но работает в оболочке
Я пометил Anaconda, потому что не могу воспроизвести ошибку на моем персональном компьютере (Ubuntu 18, Python 3.8, без Anaconda), и это, кажется, самая отличительная особенность (если subprocess
не работает на большом подмножестве Windows машины, которые были бы известны к настоящему времени), но, честно говоря, я понятия не имею, откуда взялась ошибка.