Subprocess.call или Subprocess.Popen не могут использовать исполняемые файлы, которые находятся в PATH (Linux / Windows)
Я пишу программу, которая должна работать как на Linux, так и на Windows и использовать исполняемые файлы (с параметрами), которые существуют в пути. (Предположительно)
В настоящее время у меня возникают проблемы с запуском исполняемых файлов в Windows с помощью Subprocess.Call и Subprocess.Popen.
- Встраивание Python в Windows: почему это должна быть DLL?
- Листинг серийных (COM) портов в Windows?
- Производительность Python в Windows
- Как переключиться между python 2.7 на python 3 из командной строки?
- Прокрутите значения или раздел реестра .. _winreg Python
Для кода, подобного этому, в окнах 8
def makeBlastDB(inFile, inputType, dbType, title, outDir): strProg = 'makeblastdb' strInput = '-in ' + inFile strInputType = '-input_type ' + inputType strDBType = '-dbtype ' + dbType strTitle = '-title ' + title strOut = '-out ' + os.path.join(os.sep, outDir, title) cmd = [strProg, strInput, strInputType, strDBType, strTitle, strOut] result = Popen(cmd, shell=True)
Я получаю сообщение об ошибке в консоли
'makeblastdb' is not recognized as an internal or external command, operable program or batch file.
Хотя я могу запустить ту же команду, используя cmd.exe, я получаю тот же ответ с shell = False.
Любые идеи о том, как я могу запустить команду, предполагая, что исполняемый файл находится в переменной среды PATH? благодаря
3 Solutions collect form web for “Subprocess.call или Subprocess.Popen не могут использовать исполняемые файлы, которые находятся в PATH (Linux / Windows)”
Вы можете управлять переменными среды, доступными в порожденном подпроцессе, передавая сопоставление с аргументом ключевого слова env
. Например
proc = subprocess.Popen(args, env={'PATH': '/some/path'})
Или наследовать PATH
из PATH
системной среды, не забирая все остальное из системной среды:
proc = subprocess.Popen(args, env={'PATH': os.getenv('PATH')})
Однако проще или проще просто использовать абсолютный путь.
Хорошо, вот как я заработал.
env = os.environ proc = subprocess.Popen(args, env=env)
Я боролся с этим сам, пока не нашел этот отчет об ошибке python .
«Если вы добавите каталог в PATH в Windows, чтобы каталог находился в кавычках, подпроцесс не находит в нем исполняемые файлы». Поскольку кавычки не требуются при удалении окон, они исправляют мою проблему (в версии 2.7).
- Создание статических графических файлов (png, gif, jpg) с использованием Ruby или Python
- Интеграция Opencv с wxpython