Я получаю следующую ошибку:
WindowsError: [Error 2] The system cannot find the file specified
Мой код:
subprocess.call(["<<executable file found in PATH>>"])
Windows 7, 64 бит. Python 3.x последняя, стабильная.
Любые идеи?
Спасибо,
python
path
python-3.x
Шри
источник
источник
Ответы:
Если команда является встроенной оболочкой, добавьте к вызову 'shell = True'.
Например,
dir
вы должны ввести:Цитата из документации:
источник
dir.exe
пока есть/bin/ls
in * nix.dir
реализуется CMD.EXE так же, какcd
реализовано в bash .PATH
отos.environ
и поиска вручную.В Windows я считаю, что
subprocess
модуль не смотрится,PATH
пока вы не пройдете,shell=True
потому что он используетсяCreateProcess()
за кулисами. Однако этоshell=True
может представлять угрозу безопасности, если вы передаете аргументы, которые могут исходить извне вашей программы. Чтобы,subprocess
тем не менее, найти правильный исполняемый файл, вы можете использоватьshutil.which
. Предположим, исполняемый файл в вашемPATH
названииfrob
:(Это работает на Python 3.3 и выше.)
источник
В Windows нужно звонить через cmd.exe. Как упоминалось в Apalala, команды Windows реализованы в cmd.exe, а не как отдельные исполняемые файлы.
например
/ c указывает cmd запустить следующую команду
Это безопаснее, чем использование shell = True, которое допускает инъекции оболочки.
источник
/k
вместо/c
.cmd /?
Для получения подробной информации введите в командной строке.Если вы используете powershell, то в нем будет
subprocess.call(['powershell','-command','dir'])
. Powershell поддерживает большую часть команд POSIX.источник
После долгих размышлений я обнаружил, что запуск файла, который находится в C: \ Windows \ System32 \ при запуске 32-битной версии python на 64-битной машине, является потенциальной проблемой из-за того, что Windows пытается перехитрить процесс, и перенаправить вызовы с C: \ Windows \ System32 на C: \ Windows \ SysWOW64.
Я нашел здесь пример того, как это исправить: http://code.activestate.com/recipes/578035-disable-file-system-redirector/
источник
Цитата из документации:
«До Python 3.5 эти три функции составляли высокоуровневый API для подпроцессов. Теперь вы можете использовать run () во многих случаях, но многие существующие коды вызывают эти функции».
SO: вместо subprocess.call используйте subprocess.run для Python 3.5 и выше.
источник
Я столкнулся с той же проблемой, когда звонил на PHP. Причина в том, что PHP отсутствует в PATH, поэтому команда PHP не найдена. Но PowerShell обнаружил, что он действительно существует в текущем местоположении, и предлагает заменить «PHP» на «. \ PHP», если я доверяю этой команде. Тогда все идет хорошо.
источник