Я получаю следующую ошибку:
WindowsError: [Error 2] The system cannot find the file specified
Мой код:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 бит. Python 3.x последний, стабильный.
Любые идеи?
Спасибо,
Я получаю следующую ошибку:
WindowsError: [Error 2] The system cannot find the file specified
Мой код:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 бит. Python 3.x последний, стабильный.
Любые идеи?
Спасибо,
Когда команда встроена в оболочку, добавьте к вызову shell = True.
Например, для dir
вы бы набрали:
import subprocess
subprocess.call('dir', shell=True)
Цитировать из документации:
Единственный раз, когда вам нужно указать shell = True в Windows, это когда команда, которую вы хотите выполнить, встроена в оболочку (например, dir или copy). Вам не нужно shell = True для запуска командного файла или исполняемого файла на консоли.
В Windows я считаю, что модуль subprocess
не смотрит в PATH
если вы не передадите shell=True
. Однако shell=True
может представлять угрозу безопасности, если вы передаете аргументы, которые могут поступать извне вашей программы. Тем не менее, чтобы subprocess
мог найти правильный исполняемый файл, вы можете использовать shutil.which
. Предположим, исполняемый файл в вашем PATH
называется frob
:
subprocess.call([shutil.which('frob'), arg1, arg2])
(Это работает на Python 3.3 и выше.)
В Windows вы должны вызвать cmd.exe. Как упоминалось в Apalala, команды Windows реализованы в cmd.exe не как отдельные исполняемые файлы.
например.
subprocess.call(['cmd', '/c', 'dir'])
/c указывает команде cmd выполнить следующую команду
Это безопаснее, чем использование shell = True, что позволяет выполнять инъекции оболочки.
Если путь имеет пробелы, то он цитируется?
И, конечно, вы избегали обратных косых черт правильно или использовали косые черты, правильно?
Если вы используете powershell, то в нем будет subprocess.call(['powershell','-command','dir'])
. Powershell поддерживает большую часть команд POSIX