python — Запуск консольной команды или exe файла, выполняемого в консоли в отдельном окне с последующей передачей туда команд
Вопрос задан 1 год 8 месяцев назад
Изменён 1 год 8 месяцев назад
Просмотрен 169 раз
Имеется EXE-шник, который выполняется в консоли. Нужно, чтобы он запускался в отдельном от консоли самого скрипта окне, для этого я использовал команду os.startfile , но при запуске данный EXE-шник запрашивает имя файла. Можно ли как-то реализовать передачу туда команды с названием файла при помощи скрипта?
UPD. Сделал тестовую программу с названием testprog.exe , при вводе ‘yes’ выводит ‘получилось’, при вводе любой другой команды выводит ‘не получилось’ (в обоих случаях окно консоли не закрывается, так как в конце стоит input() ). Нужно с помощью скрипта открыть эту программу в новом окне и передать туда команду, например, ‘yes’. Я попытался использовать данный код, чтобы передать туда команду ‘yes’, но окно открылось и тут же закрылось, поэтому данный способ как минимум не совсем корректен.
Конвертируем .py в .exe | PyInstaller
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 Небольшое пояснение, нет необходимости в получении потока вывода программы скриптом. Идеальная схема выполнения: я запускаю скрипт, появляется консоль, где написан результат в зависимости от переданной команды.
Мой фейл, при создании тестовой программы я упустил, что будет появляться ошибка при её вызове, связанная с тем, что для предотвращения закрытия окна я написал 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’) (для вывода «получилось»)
Зарегистрируйтесь или войдите
вашей программы Python так, чтобы оно совпадало с расположением файла .exe . А дальше просто:
subprocess.call(«calc.exe»)
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Требуется, но никогда не отображается
Опубликовать как гость
Требуется, но не отображается
Как я могу сделать скрипт Python автономным исполняемым файлом для запуска без ЛЮБОЙ зависимости?
спросил 11 лет, 10 месяцев назад
Изменено 11 месяцев назад
Просмотрено 1,4 млн раз
На этот вопрос уже есть ответы здесь :
Создайте один исполняемый файл из проекта Python [закрыто] (3 ответа)
Уроки Python / Как в PyCharm создать EXE файл
Закрыт 1 год назад.
Я создаю приложение Python и не хочу заставлять своих клиентов устанавливать Python и модули.
Итак, есть ли способ скомпилировать скрипт Python в автономный исполняемый файл?
- питон
- исполняемый файл
Вы можете использовать PyInstaller для упаковки программ Python в виде отдельных исполняемых файлов. Он работает на Windows, Linux и Mac.
Установите PyInstaller из PyPI:
pip установить pyinstaller
Перейдите в каталог вашей программы и запустите:
pyinstaller ваша программа.py
Будет создан пакет в подкаталоге с именем dist .
pyinstaller -F yourprogram.py
Добавление параметра -F (или —onefile) упакует все в один «exe».
pyinstaller -F —paths=Libsite-packages yourprogram.py
, сталкиваясь с «ImportError», вы можете рассмотреть сторонние пакеты.
pip установить pynput == 1.6.8
все еще работает в Import-Erorr — попробуйте понизить версию pyinstaller — см. Получение ошибки при использовании pynput с pyinstaller
Более подробное описание смотрите в руководстве.
Вы можете использовать py2exe, как уже ответили, и использовать Cython для преобразования ваших файлов ключей .py в .pyc , файлы, скомпилированные на C, например .dll в Windows и .so в Linux.
Восстановить гораздо сложнее, чем обычные файлы .pyo и .pyc (а также повысить производительность!).
Вы можете исследовать Нуитку. Он берет исходный код Python и преобразует его в вызовы C++ API. Затем он компилируется в исполняемый двоичный файл (ELF в Linux). Он существует уже несколько лет и поддерживает широкий спектр версий Python.
Вероятно, вы также получите улучшение производительности, если воспользуетесь им. Рекомендуется.
Да, сценарии Python можно компилировать в автономные исполняемые файлы.
PyInstaller можно использовать для преобразования программ Python в автономные исполняемые файлы под Windows , Linux , Mac OS X , FreeBSD , Solaris и
AIX . Это один из рекомендуемых конвертеров.
py2exe преобразует сценарии Python в исполняемые файлы только на платформе Windows.
Cython — это статический компилятор как для языка программирования Python, так и для расширенного языка программирования Cython.
Я хотел бы собрать некоторую полезную информацию о создании автономных файлов в 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.
И третий вариант — cx_Freeze , кроссплатформенный.
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»
Мне нравится PyInstaller, особенно «оконный» вариант:
pyinstaller —onefile —windowed myscript.py
Будет создан один единственный файл *.exe в назначении/папке.
Вам может понравиться py2exe. Там вы также найдете информацию о том, как сделать это в Linux.
Используйте 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() )
Я также рекомендую PyInstaller для лучшей обратной совместимости, например, с Python 2.3–2.7.
Для py2exe у вас должен быть Python 2.6.
Для сценариев Python 3.2 единственным выбором является cx_Freeze. Соберите его из исходников; иначе это не сработает.
Для Python 2.x я рекомендую PyInstaller, так как он может упаковать программу Python в один исполняемый файл, в отличие от cx_Freeze, который также выводит библиотеки.
Поскольку он отсутствует в текущем списке ответов, я думаю, стоит упомянуть, что стандартная библиотека включает модуль 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.
py2exe создаст нужный вам EXE-файл, но у вас должна быть та же версия MSVCR90. dll на машине, на которой вы собираетесь использовать новый EXE-файл.
Дополнительную информацию см. в учебнике .
Вы можете найти список утилит распространения, перечисленных в Распределительные предприятия .
Я использую bbfreeze, и он работает очень хорошо (хотя пока не поддерживает Python 3).
Не совсем упаковка кода Python, но теперь есть Grumpy от Google, который транспилирует код в Go.
Он не поддерживает Python C API, поэтому может работать не для всех проектов.
Используя PyInstaller, я нашел лучший метод, используя ярлык для .exe, а не делая —один файл . В любом случае, вероятно, есть какие-то файлы данных, и если вы используете приложение на основе сайта, ваша программа также зависит от файлов HTML, JavaScript и CSS. Нет никакого смысла перемещать все эти файлы куда-то. .. Вместо этого, что если мы переместим рабочий путь вверх?
Создайте ярлык для EXE-файла, переместите его вверх и задайте целевой и начальный пути, как указано, чтобы иметь относительные пути, ведущие к distfolder :
Цель: %windir%system32cmd. exe /c start distweb_wrapperweb_wrapper.exe Запустите: «%windir%system32cmd.exe /c start distweb_wrapper»
Python-сообщество
- Начало
- » Python для новичков
- » Проблема. Запуск EXE-файла из скрипта
#1 Ноя. 2, 2014 22:54:50
Проблема. Запуск EXE-файла из скрипта
Доброго времени суток форумчане.
Проблема такова, есть программка Python под Win отлаженная скомпилированная в ехе.
В программе есть кнопка запуска другой, сторонней программы ЕХЕ (далее просто ЕХЕшник) не питоньей.
Для запуска второй программы, нужны рядом лежащие конфиг файлы.
Суть проблемы такова. Если просто запускать программу из под системы — никаких проблем, как только я пытаюсь запустить ЕХЕ из под моей программы, вторая крашится, а сообщение говорит о том что не найдены файлы конфигурации.
Иными словами, моя программа дает управление ЕХЕшнику из под своей папки, и при запуске он не видит свои конфиги, что лежат рядом. (это как понял я)
Вот код:
def start_system():
way_dir = path.normpath(path.join(getcwd(), ‘..’))
system(way_dir + ‘\blablabla.exe’)
sys.exit(0)
Первая строка поднимает рабочий каталог вверх на одну папку
Вторая собственно открывает файл
Пробовал по разному, и юзать startfile, subprocess результат тот же. ЕХЕшник вылетает с ексепшином не найден файл.
Если, в рабочую папку скрипта (питон-программы) положить конфиги — все ок, но это не выход.
Кто может, подскажите. Заранее спасибо.
Источник: python.su
Не удается запустить exe-файл, созданный pyinstaller
Я использую Pycharm для написания исходного кода .py, он отлично работает, когда я использую «Выполнить» в Pycharm. После завершения написания исходного кода я хочу использовать Pyinstaller для упаковки кода в исполняемый файл, процесс упаковки работает нормально и создается файл .exe. Но когда я дважды щелкаю исполняемый файл, никакой реакции нет. Не знаю, что случилось, пожалуйста, помогите мне. Pyinstaller создал предупреждающий отчет в текстовом файле, но я не думаю, что это основная причина, я все равно прикрепил его внизу.
(venv) D:DropboxProjectPycharm Projectsbiaobai>pyinstaller -F -w -i aixin.ico main.py 1405 INFO: PyInstaller: 3.3.1 1411 INFO: Python: 3.7.0 1413 INFO: Platform: Windows-10-10.0.17134-SP0 1418 INFO: wrote D:DropboxProjectPycharm Projectsbiaobaimain.spec 1431 INFO: UPX is not available. 1448 INFO: Extending PYTHONPATH with paths [‘D:\Dropbox\Project\Pycharm Projects\biaobai’, ‘D:\Dropbox\Project\Pycharm Projects\biaobai’] 1449 INFO: checking Analysis 1449 INFO: Building Analysis because out00-Analysis.toc is non existent 1450 INFO: Initializing module dependency graph. 1455 INFO: Initializing module graph hooks.
1458 INFO: Analyzing base_library.zip . 6290 INFO: running Analysis out00-Analysis.toc 6321 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable required by D:DropboxProjectPycharm ProjectsbiaobaivenvScriptspython.exe 8194 INFO: Caching module hooks. 8206 INFO: Analyzing D:DropboxProjectPycharm Projectsbiaobaimain.py 9513 INFO: Loading module hooks. 9513 INFO: Loading module hook «hook-encodings.py». 9628 INFO: Loading module hook «hook-PIL.Image.py». 10335 INFO: Processing pre-find module path hook distutils 10591 INFO: Loading module hook «hook-PIL.py».
10607 INFO: Excluding import ‘PySide’ 10609 INFO: Removing import of PySide from module PIL.ImageQt 10611 INFO: Import to be excluded not found: ‘FixTk’ 10612 INFO: Excluding import ‘tkinter’ 10614 INFO: Removing import of tkinter from module PIL.ImageTk 10615 INFO: Excluding import ‘PyQt4’ 10618 INFO: Removing import of PyQt4 from module PIL.ImageQt 10619 INFO: Excluding import ‘PyQt5’ 10620 INFO: Removing import of PyQt5 from module PIL.ImageQt 10621 INFO: Loading module hook «hook-PIL.SpiderImagePlugin.py». 10651 INFO: Import to be excluded not found: ‘FixTk’ 10651 INFO: Excluding import ‘tkinter’ 10652 INFO: Loading module hook «hook-pydoc.py».
10657 INFO: Loading module hook «hook-xml.py». 11028 INFO: Loading module hook «hook-_tkinter.py». 11438 INFO: checking Tree 11438 INFO: Building Tree because out00-Tree.toc is non existent 11439 INFO: Building Tree out00-Tree.toc 11549 INFO: checking Tree 11550 INFO: Building Tree because out01-Tree.toc is non existent 11550 INFO: Building Tree out01-Tree.toc 11566 INFO: Loading module hook «hook-distutils.py».
11609 INFO: Looking for ctypes DLLs 11609 INFO: Analyzing run-time hooks . 11613 INFO: Including run-time hook ‘pyi_rth__tkinter.py’ 11624 INFO: Looking for dynamic libraries 13929 INFO: Looking for eggs 13929 INFO: Using Python library D:DropboxProjectPycharm ProjectsbiaobaivenvScriptspython37.dll 13930 INFO: Found binding redirects: [] 13934 INFO: Warnings written to D:DropboxProjectPycharm Projectsbiaobaibuildmainwarnmain.txt 14026 INFO: Graph cross-reference written to D:DropboxProjectPycharm Projectsbiaobaibuildmainxref-main.html 14105 INFO: checking PYZ 14105 INFO: Building PYZ because out00-PYZ.toc is non existent 14105 INFO: Building PYZ (ZlibArchive) D:DropboxProjectPycharm Projectsbiaobaibuildmainout00-PYZ.pyz 15080 INFO: Building PYZ (ZlibArchive) D:DropboxProjectPycharm Projectsbiaobaibuildmainout00-PYZ.pyz completed successfully. 15095 INFO: checking PKG 15095 INFO: Building PKG because out00-PKG.toc is non existent 15096 INFO: Building PKG (CArchive) out00-PKG.pkg 18477 INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully.
18528 INFO: Bootloader D:DropboxProjectPycharm Projectsbiaobaivenvlibsite-packagesPyInstallerbootloaderWindows-32bitrunw.exe 18529 INFO: checking EXE 18529 INFO: Building EXE because out00-EXE.toc is non existent 18530 INFO: Building EXE from out00-EXE.toc 18555 INFO: SRCPATH [(‘aixin.ico’, None)] 18555 INFO: Updating icons from [‘aixin.ico’] to C:UsersADMINI~1AppDataLocalTemptmp14uu9lyu 18556 INFO: Writing RT_GROUP_ICON 0 resource with 20 bytes 18556 INFO: Writing RT_ICON 1 resource with 28840 bytes 18566 INFO: Appending archive to EXE D:DropboxProjectPycharm Projectsbiaobaidistmain.exe 18591 INFO: Building EXE from out00-EXE.toc completed successfully.
missing module named resource — imported by posix, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named posix — imported by os, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named _posixsubprocess — imported by subprocess, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named org — imported by pickle, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named readline — imported by cmd, code, pdb, D:DropboxProjectPycharm Projectsbiaobaimain.py excluded module named _frozen_importlib — imported by importlib, importlib.abc, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named _frozen_importlib_external — imported by importlib._bootstrap, importlib, importlib.abc, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named _winreg — imported by platform, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named _scproxy — imported by urllib.request missing module named java — imported by platform, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named ‘java.lang’ — imported by platform, D:DropboxProjectPycharm Projectsbiaobaimain.py, xml.sax._exceptions missing module named vms_lib — imported by platform, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named termios — imported by tty, D:DropboxProjectPycharm Projectsbiaobaimain.py, getpass missing module named grp — imported by shutil, tarfile, pathlib, D:DropboxProjectPycharm Projectsbiaobaimain.py missing module named pwd — imported by posixpath, shutil, tarfile, http.server, webbrowser, pathlib, D:DropboxProjectPycharm Projectsbiaobaimain.py, netrc, getpass missing module named ‘org.python’ — imported by copy, D:DropboxProjectPycharm Projectsbiaobaimain.py, xml.sax missing module named cffi — imported by PIL.Image, PIL.PyAccess, PIL.ImageTk missing module named Tkinter — imported by PIL.ImageTk missing module named olefile — imported by PIL.FpxImagePlugin, PIL.MicImagePlugin missing module named UserDict — imported by PIL.PdfParser missing module named ‘PySide.QtCore’ — imported by PIL.ImageQt missing module named ‘PyQt4.QtCore’ — imported by PIL.ImageQt missing module named ‘PyQt5.QtCore’ — imported by PIL.ImageQt missing module named numpy — imported by PIL.ImageFilter missing module named pathlib2 — imported by PIL.Image missing module named __builtin__ — imported by PIL.Image
Комментарии (2)
Я попытался упаковать исполняемый файл с помощью «pyinstaller -F -i aixin.ico main.py» вместо использования «pyinstaller -F -w -i aixin.ico main.py». Это позволяет запускать оконное приложение через CMD, а затем я получил следующую ошибку: Неустранимая ошибка Python: Py_Initialize: невозможно получить кодировку языкового стандарта zipimport.ZipImportError: не удается найти кодировки модуля Текущий поток 0x00003d20 (большинство сначала недавний звонок): «
Я думаю, что, выполнив поиск по приведенному выше сообщению об ошибке, я получил ответ: stackoverflow.com/questions/48872724/…. Напрашивается вывод: Python 3.7 по-прежнему не поддерживается. Не уверен на 100%.
Источник: reddeveloper.ru