Подтвердить что ты не робот

Windows не может найти файл на subprocess.call()

Я получаю следующую ошибку:

WindowsError: [Error 2] The system cannot find the file specified

Мой код:

subprocess.call(["<<executable file found in PATH>>"])

Windows 7, 64 бит. Python 3.x последний, стабильный.

Любые идеи?

Спасибо,

4b9b3361

Ответ 1

Когда команда встроена в оболочку, добавьте к вызову shell = True.

Например, для dir вы бы набрали:

import subprocess
subprocess.call('dir', shell=True)

Цитировать из документации:

Единственный раз, когда вам нужно указать shell = True в Windows, это когда команда, которую вы хотите выполнить, встроена в оболочку (например, dir или copy). Вам не нужно shell = True для запуска командного файла или исполняемого файла на консоли.

Ответ 2

В Windows я считаю, что модуль subprocess не смотрит в PATH если вы не передадите shell=True. Однако shell=True может представлять угрозу безопасности, если вы передаете аргументы, которые могут поступать извне вашей программы. Тем не менее, чтобы subprocess мог найти правильный исполняемый файл, вы можете использовать shutil.which. Предположим, исполняемый файл в вашем PATH называется frob:

subprocess.call([shutil.which('frob'), arg1, arg2])

(Это работает на Python 3.3 и выше.)

Ответ 3

В Windows вы должны вызвать cmd.exe. Как упоминалось в Apalala, команды Windows реализованы в cmd.exe не как отдельные исполняемые файлы.

например.

subprocess.call(['cmd', '/c', 'dir'])

/c указывает команде cmd выполнить следующую команду

Это безопаснее, чем использование shell = True, что позволяет выполнять инъекции оболочки.

Ответ 4

Если путь имеет пробелы, то он цитируется?

И, конечно, вы избегали обратных косых черт правильно или использовали косые черты, правильно?

Ответ 5

Если вы используете powershell, то в нем будет subprocess.call(['powershell','-command','dir']). Powershell поддерживает большую часть команд POSIX