Как запустить exe файл через python
Перейти к содержимому

Как запустить exe файл через python

Запуск других программ из Python

Программа на Python может запускать другие программы с помощью функции Popen() (от process open) встроенного модуля subprocess. В качестве аргумента функция принимает имя программы, которую нужно запустить:

Возвращаемое значение представляет собой объект Popen , имеющий два полезных метода: poll() и wait() .

Метод poll() возвращает значение None , если в момент его вызова процесс все еще выполняется. Если же процесс к этому моменту завершен, то он возвращает код завершения процесса. Код заверешения служит индикатором того, завершился ли процесс без ошибок (код равен нулю) или же его завершение было вызвано ошибкой (ненулевой код).

Метод wait() ожидает завершения запущенного процесса, прежде чем продолжить выполнение основной программы. Возвращаемым значением метода является целочисленный код завершения процесса.

Сначала мы открываем процесс блокнота, затем проверяем, возвращает ли метод poll() значение None . Это означает, что процесс все еще выполняется. После этого закрываем блокнот и еще раз проверяем, возвращает ли метод poll() значение None . Теперь оба метода, wait() и poll() возвращают нулевое значение, что указывает на завершение программы notepad.exe без ошибок.

Передача аргументов командной строки

Процессам, создаваемым с помощью функции Popen() , можно передвать аргументы командной строки. Для этого функции Popen() надо передать список в качестве единственного аргумента. Первой строкой в этом списке должно быть имя исполняемого файла программы, которую надо запустить. Все последующие строки — это аргументы командной строки, которые будут переданы программе при запуске.

Здесь мы не только запускаем приложение notepad.exe , но и открываем файл readme.txt .

Открытие файлов программ по умолчанию

Двойной клик на иконке файла с расширением .txt позволяет автоматически запустить приложение, ассоциированное с этим расширением. Функция Popen() также может открывать файлы подобным образом:

В каждой операционной системе есть программа, выполняющая те же функции, что и двойной клик на иконке файла. В Windows это программа start , в Ubuntu Linux — программа see .

Как запустить из Python внешний .exe

Как запустить из Python .exe файл так, чтоб программа не ожидала завершения работы .exe , а просто продолжала работу?

Например через os.startfile. Этот метод работает так, как будто файл запустили двойным кликом — программы будут запущены, для файлов будет вызвана ассоциированная с ними программа.

Подробнее можно прочитать здесь и здесь . Эта команда очень гибкая и можно запускать с аргументами. Вообще это довольно интересная тема, связанная с процессами и потоками. В данном случае как раз вызывается новый процесс. Тот же функционал можно выполнить с помощью библиотек multiprocessing или threading .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками python python-3.x subprocess или задайте свой вопрос.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345

Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как запустить exe-файл из python?

Я пытаюсь запустить exe-файл (в фоновом режиме) по определенному пути в моем локальном проекте на python с помощью библиотеки os.system. Мне удалось изменить папки, такие как «CD», но я не могу запустить файл.

Это для проекта Python, работающего на Windows 64BIT, Python 3.5.3

Файл.exe находится в директории «программ».

[WinError 193]% 1 не является допустимым приложением Win32

Я видел другие сообщения об этой проблеме, но я не мог решить ее. Есть идеи?

3 ответа

Проблема решена. Спасибо всем, проблема была в административных привилегиях .. Начал pycharm как администратор. И, как я сказал — я смог увидеть файл с помощью os.listdir (), но когда я пытаюсь его запустить, появляются ошибки. Я думаю, что главная проблема заключается в том, что os.system () наследует текущие привилегии от процесса Python.

Проблема в том, что команда system не работает. Это «работает», но в отдельном подпроцессе, который выходит сразу. Текущий каталог не распространяется до вызывающего процесса (также, так как вы не проверяете код возврата, команда не завершится ошибкой, даже с несуществующим каталогом. Обратите внимание, что это происходит здесь, так как имя каталога имеет пробелы в нем и не указаны . ).

Для этого вам придется использовать os.chdir , но вам это даже не нужно.

Если вы хотите запустить команду в определенном месте, просто передайте абсолютный путь к команде (и, поскольку она использует строковые литералы, всегда используйте префикс r , чтобы избежать использования \t или <> символы интерпретируются как специальные символы . ). Например, с python 3, при условии, что в командной строке есть ошибка (но хорошо в python 2 . ):

Поэтому всегда используйте сырой префикс. Вот как я бы переписал это:

И если вам действительно нужно, чтобы текущий каталог был таким же, как exe, используйте параметр cwd . Также получите возвращаемое значение Popen , чтобы иметь возможность ждать / poll / kill / что угодно и получить код завершения команды:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *