Запуск exe python


python - Запуск консольной команды или exe файла, выполняемого в консоли в отдельном окне с последующей передачей туда команд

Вопрос задан

Изменён 1 год 8 месяцев назад

Просмотрен 169 раз

Имеется EXE-шник, который выполняется в консоли. Нужно, чтобы он запускался в отдельном от консоли самого скрипта окне, для этого я использовал команду os.startfile, но при запуске данный EXE-шник запрашивает имя файла. Можно ли как-то реализовать передачу туда команды с названием файла при помощи скрипта?

UPD. Сделал тестовую программу с названием testprog.exe, при вводе 'yes' выводит 'получилось', при вводе любой другой команды выводит 'не получилось' (в обоих случаях окно консоли не закрывается, так как в конце стоит input()). Нужно с помощью скрипта открыть эту программу в новом окне и передать туда команду, например, 'yes'. Я попытался использовать данный код, чтобы передать туда команду 'yes', но окно открылось и тут же закрылось, поэтому данный способ как минимум не совсем корректен.

cmd = 'testprog.exe' p = subprocess.Popen(cmd, creationflags=subprocess.CREATE_NEW_CONSOLE, stdin=subprocess.PIPE, stdout=subprocess.PIPE) p.stdin.write(b'yes') # Также пробовал p.communicate(input='yes') p.stdin.close() # 

UPD2 Небольшое пояснение, нет необходимости в получении потока вывода программы скриптом. Идеальная схема выполнения: я запускаю скрипт, появляется консоль, где написан результат в зависимости от переданной команды.

  • python
  • консоль
  • os
  • subprocess

7

Мой фейл, при создании тестовой программы я упустил, что будет появляться ошибка при её вызове, связанная с тем, что для предотвращения закрытия окна я написал input(). Код тестовой программы:

ink = input('Введите команду ') if ink == 'yes': print ('Получилось') input() else: print ('Не получилось') input() 

Если input() заменить на time.sleep(), то всё работает, используя команду p=subprocess.run(command, creationflags=subprocess.CREATE_NEW_CONSOLE, input=b'yes') (для вывода "получилось")

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Запуск python exe приложения без вывода консоли

Вопрос задан

Изменён 2 месяца назад

Просмотрен 640 раз

У меня есть программа написанная на python, которую я собираю в exe. Теперь мне нужно как-то сделать так, чтобы запуская её не выводилось консольное окно. Это как-то можно сделать? Я слышал, что можно что-то придумать добавив расширение к скрипту, вместо .py написать что-то другое. Но мне важно, чтобы такая программа запускалась без установленного пайтона на компьютере. Как это можно реализовать?

  • python
  • python-3.x

3

pyinstaller --onefile -w file.py

1

без установленного пайтона на компьютере

pyinstaller не компилирует, не транслирует код питона. Грубо описать его работу можно так: копируется папка питона с нужными модулями, копируется сам проект, делается скрипт для запуска. То есть питон установлен не будет, но он на целевом компьютере будет находится в папке с твоей программой, а не по стандартному пути.

добавив расширение к скрипту, вместо .py

Есть три стандартных расширения скриптов питона *.pyw - запускает скрипт без открытия консоли *.pyo - содержит прекомпилированый код, который быстрее читается интерпритатором, но не читаем для человека

не выводилось консольное окно.

Здесь можно найти обходные пути, как то переопределение функции print, чтобы она не выводила ничего в консоль, запуск по ярлыку при cmd -h "py main.py", или открытие окна за пределами видимой части монитора.

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Подпроцесс

— Как запустить внешний исполняемый файл с помощью Python?

спросил

Изменено 1 год, 11 месяцев назад

Просмотрено 126 тысяч раз

У меня есть внешний исполняемый файл, который я пытаюсь запустить из скрипта Python. Исполняемый файл CMD запускается, но не генерирует вывод. Вероятно, он выйдет до того, как будет сгенерирован вывод. Любое предложение о том, как отложить выход до тех пор, пока не будут сгенерированы выходные данные?

 подпроцесс импорта, sys из импорта подпроцесса Popen, PIPE exe_str = r"C:/Windows/System32/cmd C:/temp/calc.exe" родитель = подпроцесс.Popen(exe_str, stderr=subprocess.PIPE) 
  • питон
  • подпроцесс
  • исполняемый

4

использовать subprocess.call , больше информации здесь:

 подпроцесс импорта subprocess.call(["C:\\temp\\calc.exe"]) 

или

 импорт ОС os.system('"C:/Windows/System32/notepad.exe"') 

Надеюсь, это поможет вам...

2

Метод os.system устарел и не должен использоваться в новых приложениях. Модуль подпроцесса — это питонический способ делать то, что вам нужно.

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

 подпроцесс импорта cmd = "c:\\file.exe" процесс = подпроцесс.Popen(cmd, stdout=subprocess.PIPE, флаги создания=0x08000000) процесс.ждите() 

createflags=0x08000000 — необязательный параметр, подавляющий запуск окна, что может быть полезно, если вызываемую программу не нужно видеть напрямую.

1

Вариант 1

 подпроцесс импорта subprocess.call('C:\Windows\System32\calc.exe') 

Вариант 2

 subprocess.Popen(['C:\Windows\System32\calc.exe'],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True).communicate() 

Опция 3

 импорт ОС os. system('C:\Windows\System32\calc.exe') 

1

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

 subprocess.call("calc.exe") 

подойдет.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Как я могу сделать скрипт Python автономным исполняемым файлом для запуска без ЛЮБОЙ зависимости?

спросил

Изменено 11 месяцев назад

Просмотрено 1,4 млн раз

На этот вопрос уже есть ответы здесь :

Создайте один исполняемый файл из проекта Python [закрыто] (3 ответа)

Закрыт 1 год назад.

Я создаю приложение Python и не хочу заставлять своих клиентов устанавливать Python и модули.

Итак, есть ли способ скомпилировать скрипт Python в автономный исполняемый файл?

  • питон
  • исполняемый файл

2

Вы можете использовать PyInstaller для упаковки программ Python в виде отдельных исполняемых файлов. Он работает на Windows, Linux и Mac.

Установите PyInstaller из PyPI:

 pip установить pyinstaller 

Перейдите в каталог вашей программы и запустите:

 pyinstaller ваша программа.py 

Будет создан пакет в подкаталоге с именем dist .

 pyinstaller -F yourprogram.py 

Добавление параметра -F (или --onefile) упакует все в один "exe".

 pyinstaller -F --paths=<ваш_путь>\Lib\site-packages yourprogram.py 

, сталкиваясь с «ImportError», вы можете рассмотреть сторонние пакеты.

 pip установить pynput == 1.6.8 

все еще работает в Import-Erorr — попробуйте понизить версию pyinstaller — см. Получение ошибки при использовании pynput с pyinstaller

Более подробное описание смотрите в руководстве.

15

Вы можете использовать py2exe, как уже ответили, и использовать Cython для преобразования ваших файлов ключей .py в .pyc , файлы, скомпилированные на C, например .dll в Windows и .so в Linux.

Восстановить гораздо сложнее, чем обычные файлы .pyo и .pyc (а также повысить производительность!).

10

Вы можете исследовать Нуитку. Он берет исходный код Python и преобразует его в вызовы C++ API. Затем он компилируется в исполняемый двоичный файл (ELF в Linux). Он существует уже несколько лет и поддерживает широкий спектр версий Python.

Вероятно, вы также получите улучшение производительности, если воспользуетесь им. Рекомендуется.

10

Да, сценарии Python можно компилировать в автономные исполняемые файлы.

PyInstaller можно использовать для преобразования программ Python в автономные исполняемые файлы под Windows , Linux , Mac OS X , FreeBSD , Solaris и

AIX . Это один из рекомендуемых конвертеров.

py2exe преобразует сценарии Python в исполняемые файлы только на платформе Windows.

Cython — это статический компилятор как для языка программирования Python, так и для расширенного языка программирования Cython.

3

Я хотел бы собрать некоторую полезную информацию о создании автономных файлов в Windows с использованием Python 2.7.

Я использовал py2exe , и это работает, но у меня были некоторые проблемы.

  • Выявлены некоторые проблемы при создании отдельных файлов в 64-разрядной версии Windows: Использование bundle_files = 1 с py2exe не работает;

  • Для работы необходимо создать файл setup.py. http://www.py2exe.org/index.cgi/Tutorial#Step2;

  • У меня были проблемы с зависимостями, которые нужно было решить, импортировав пакеты в установочный файл;

  • Мне не удалось заставить его работать вместе с PyQt.

Эта последняя причина заставила меня попробовать PyInstaller http://www.pyinstaller.org/.

На мой взгляд, намного лучше, потому что:

  • Проще в использовании.

Я предлагаю создать файл .bat со следующими строками, например (pyinstaller.exe должен быть в пути Windows):

 pyinstaller.exe --onefile MyCode.py 
  • Среди прочих опций можно создать один файл (https://pyinstaller.readthedocs.io/en/stable/usage.html#options).

  • У меня была только одна проблема с использованием PyInstaller и многопроцессорного пакета, которая была решена с помощью этого рецепта: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing.

Итак, я думаю, что, по крайней мере, для python 2.7 лучше и проще вариант PyInstaller.

1

И третий вариант — cx_Freeze , кроссплатформенный.

2

 pyinstaller yourfile.py -F --onefile 

Это создает автономный EXE-файл в Windows.

Важное примечание 1 : EXE-файл будет создан в папке с именем «dist».

Важное примечание 2 : Не забудьте --onefile flag

Вы можете установить PyInstaller с помощью pip install PyInstaller

ПРИМЕЧАНИЕ: если есть скрытые зависимости запустите EXE-файл и получите сообщение об ошибке отсутствия библиотеки (win32timezone в приведенном ниже примере), затем используйте что-то вроде этого:

 pyinstaller --hiddenimport win32timezone -F «Резервное копирование Program. py» 

0

Мне нравится PyInstaller, особенно «оконный» вариант:

 pyinstaller --onefile --windowed myscript.py 

Будет создан один единственный файл *.exe в назначении/папке.

4

Вам может понравиться py2exe. Там вы также найдете информацию о том, как сделать это в Linux.

2

Используйте py2exe.... используйте следующие файлы настройки:

 из настройки импорта distutils.core импортировать py2exe из distutils.filelist импортировать findall импортировать matplotlib настраивать( консоль = ['PlotMemInfo.py'], варианты = { 'py2exe': { 'пакеты': ['matplotlib'], 'dll_excludes': ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'libgdk_pixbuf-2.0-0.dll'] } }, data_files = matplotlib. get_py2exe_datafiles() ) 

2

Я также рекомендую PyInstaller для лучшей обратной совместимости, например, с Python 2.3–2.7.

Для py2exe у вас должен быть Python 2.6.

2

Для сценариев Python 3.2 единственным выбором является cx_Freeze. Соберите его из исходников; иначе это не сработает.

Для Python 2.x я рекомендую PyInstaller, так как он может упаковать программу Python в один исполняемый файл, в отличие от cx_Freeze, который также выводит библиотеки.

0

Поскольку он отсутствует в текущем списке ответов, я думаю, стоит упомянуть, что стандартная библиотека включает модуль zipapp , который можно использовать для этой цели. Его основное использование — это просто сжатие набора файлов Python в zip-файл с расширением . pyz , который можно напрямую выполнить как python myapp.pyz , но вы также можете создать автономный пакет из requirements.txt файл:

 $ python -m pip install -r requirements.txt --target myapp $ python -m zipapp -p "интерпретатор" myapp 

Где интерпретатор может быть чем-то вроде /usr/bin/env python (см. Определение интерпретатора).

Обычно сгенерированный файл .pyz / .pyzw должен быть исполняемым в Unix, потому что он помечен как таковой, и в Windows, поскольку установка Python обычно регистрирует эти расширения. Однако относительно легко создать исполняемый файл Windows, который будет работать до тех пор, пока у пользователя есть python3.dll в пути.

Если вы не хотите, чтобы конечный пользователь устанавливал Python, вы можете распространять приложение вместе со встраиваемым пакетом Python.

1

py2exe создаст нужный вам EXE-файл, но у вас должна быть та же версия MSVCR90. dll на машине, на которой вы собираетесь использовать новый EXE-файл.

Дополнительную информацию см. в учебнике .

Вы можете найти список утилит распространения, перечисленных в Распределительные предприятия .

Я использую bbfreeze, и он работает очень хорошо (хотя пока не поддерживает Python 3).

3

Не совсем упаковка кода Python, но теперь есть Grumpy от Google, который транспилирует код в Go.

Он не поддерживает Python C API, поэтому может работать не для всех проектов.

1

Используя PyInstaller, я нашел лучший метод, используя ярлык для .exe, а не делая --один файл . В любом случае, вероятно, есть какие-то файлы данных, и если вы используете приложение на основе сайта, ваша программа также зависит от файлов HTML, JavaScript и CSS. Нет никакого смысла перемещать все эти файлы куда-то. .. Вместо этого, что если мы переместим рабочий путь вверх?

Создайте ярлык для EXE-файла, переместите его вверх и задайте целевой и начальный пути, как указано, чтобы иметь относительные пути, ведущие к dist\folder :

 Цель: %windir%\system32\cmd. exe /c start dist\web_wrapper\web_wrapper.exe Запустите: "%windir%\system32\cmd.exe /c start dist\web_wrapper\" 

Мы можем переименовать ярлык во что угодно, поэтому переименовываем его в «GTFS-Manager». Теперь, когда я дважды щелкаю ярлык, я как будто запускаю файл python ! Я нашел этот подход лучше, чем --onefile one as:

  1. В случае onefile есть проблема с отсутствием .dll для ОС Windows 7, которая требует предварительной установки и т. д. Зевает. При обычной сборке с несколькими файлами таких проблем нет.
  2. Все файлы, которые использует мой Python-скрипт (он развертывает веб-сервер tornado, и для его размещения требуется целый чертов веб-сайт!) не нужно никуда перемещать: я просто создаю ярлык вверху.
  3. Я действительно могу использовать эту же папку в Ubuntu (запустите python3 myfile.py ) и Windows (дважды щелкните ярлык).
  4. Мне не нужно возиться с чрезмерно сложным взломом файла .spec для включения файлов данных и т. д.

О, не забудьте удалить папку сборки после сборки. Это сэкономит на размере.

1

Используйте Cython для преобразования в C, компиляции и компоновки с GCC.

Другой вариант: сделать базовые функции на C (те, которые вы хотите сделать труднообратимыми), скомпилировать их и использовать Boost.Python для импорта скомпилированного кода (плюс вы получите гораздо более быстрое выполнение кода). Затем используйте любой упомянутый инструмент для распространения.

Мне сказали, что PyRun тоже вариант. В настоящее время он поддерживает Linux, FreeBSD и Mac OS X.

1

Очень активный вопрос .


Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: