Мне нужно вызвать исполняемый файл, который находится в том же каталоге, что и работающий скрипт Python . Мне нужно знать, как я могу вызвать его через команду из моего скрипта с некоторыми параметрами.
В командной строке Windows я делаю это:
miejecutable -p1 datos
Желательно, если есть способ запустить его как в Python 2, так и в 3.
Ответ переведен с: https://stackoverflow.com/a/89243/255257
Используйте модуль sobprocess в stdlib:
версия
Стоит отметить, что
call
он возвращает код выхода исполняемой программы или команды, который можно собрать следующим образом:Еще одна особенность заключается в том, что вы можете сделать вызов через системную оболочку, передав параметр shell=True, например:
Преимущество использования подпроцесса по сравнению с системой заключается в том, что он более гибкий (вы можете получить как stdout, так и stderr, «настоящий» код выхода, лучшую обработку ошибок и т. д.).
os.system устарела или скоро будет:
https://docs.python.org/2/library/subprocess.html#replacing-older-functions-with-the-subprocess-module
Для одноразовых скриптов или быстрых и грязных решений
os.system
достаточно:Это кажется простым, у вас есть следующий скрипт:
Я объясню построчно: В строке 1 мы импортируем модуль операционной системы. Строка 2 — это комментарий, а строка 3 — это место, где вам уже нужно запустить команду, функция
os.system
дает нам системную строку, на которой мы можем запускать команды.В строке 4 сохраняется результат выполнения команды, а в строке 5 мы сравниваем, если вывод команды равен 0, значит, система выполнила команду без проблем, в строке 6 мы обрабатываем, если в системе произошла ошибка.
Если вы посмотрите на строку 3, мы сообщаем системной строке, что все, что выбрасывает команда, она очищает в файле exit_del_command.log, чтобы иметь подробную информацию о том, что могло выйти из строя.
Надеюсь, это поможет вам.
РЕДАКТИРОВАТЬ: я забыл, что прокомментировал @jachguate, что os.system будет заменена в следующих версиях Python, поэтому использование
subprocess.call
РЕДАКТИРОВАТЬ 2: Если вы собираетесь использовать, не
subprocess.call
забудьте также добавить параметрshell=True
, оставив свой вызов:Чтобы избежать проблем, связанных с тем, что он не может найти файлы, зависящие от оболочки/линии текущей системы, в которой вы находитесь.