Я пишу программу, которая должна работать как в Linux, так и в Windows и использовать исполняемые файлы (с параметрами), которые существуют в пути. (Предположительно )

В настоящее время у меня возникают проблемы с запуском исполняемых файлов в Windows с использованием Subprocess.Call и Subprocess.Popen.

Для кода, подобного этому, в Windows 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? Благодарность

13
Jacob Wang 4 Фев 2013 в 05:55

4 ответа

Лучший ответ

Хорошо, вот как я получил его на работу.

env = os.environ
proc = subprocess.Popen(args, env=env)
7
Jacob Wang 22 Фев 2013 в 03:31

Мой коллега воспроизвел эту проблему с Python 3.6.5 на 64-битной Windows 10.

Однако установленная версия Python была 32-битной.

Переустановка 64-битной версии Python исправила эту проблему.

0
Ryuu 12 Дек 2018 в 10:33

Вы можете управлять переменными среды, доступными в порожденном подпроцессе, передавая сопоставление с аргументом ключевого слова env. Например.

proc = subprocess.Popen(args, env={'PATH': '/some/path'})

Или унаследовать PATH от переменной системной среды, не обязательно добавляя все остальное из системной среды:

proc = subprocess.Popen(args, env={'PATH': os.getenv('PATH')})

Впрочем, может быть проще / проще использовать абсолютный путь.

8
wim 10 Май 2016 в 18:49

Я боролся с этим сам, пока не нашел этот отчет об ошибках Python.

«Если вы добавите каталог в PATH в Windows, чтобы каталог был в кавычках, подпроцесс не найдет в нем исполняемые файлы». Поскольку кавычки не требуются при удалении окон, это решает мою проблему (в 2.7).

4
joshua 14 Июн 2013 в 17:03