Скрипт python без окна

Как заставить скрипт Python работать без открытия окна консоли?

Я хочу дважды щелкнуть по моему скрипту Python (который использует графический интерфейс Tkinter), и я просто хочу, чтобы он открывал окно Tkinter, а не окно консоли.

Для этого я изменил расширение с .py на .pyw, и это, кажется, работает нормально в Windows, но когда я дважды щелкаю свой файл .pyw на компьютере с Linux, это не работает. Он просто застыл, и мне пришлось перезапустить мою систему.

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

2 ответа

Вы можете использовать pyinstaller для создания исполняемых файлов для разных платформ, которые вы хотите.

Синтаксис команды pyinstaller:

pyinstaller [options] script [script . ] | specfile 

В самом простом случае установите текущий каталог в местоположение вашей программы myscript.py и выполните:

PyInstaller анализирует myscript.py и:

Writes myscript.spec in the same folder as the script. Creates a folder build in the same folder as the script if it does not exist. Writes some log files and working files in the build folder. Creates a folder dist in the same folder as the script if it does not exist. Writes the myscript executable folder in the dist folder. 

В папке dist вы найдете приложение, которое вы распространяете среди пользователей.

Читайте также:  Условие php для ссылок

Обычно вы называете один скрипт в командной строке. Если вы назовете больше, все будут проанализированы и включены в вывод. Однако первый названный скрипт предоставляет имя для файла спецификации и для исполняемой папки или файла. Его код выполняется первым во время выполнения.

Для определенных целей вы можете редактировать содержимое myscript.spec (описано в разделе «Использование файлов спецификаций»). После того, как вы сделаете это, вы называете файл спецификации PyInstaller вместо сценария:

Вы можете указать путь к файлу скрипта или спецификации, например

pyinstaller options. ~/myproject/source/myscript.py 
pyinstaller "C:\Documents and Settings\project\myscript.spec" 

Прошло много времени с тех пор, как я попробовал Linux, но я считаю, что это должно быть довольно просто, во-первых, вы должны поместить шебанг в верхнюю часть скрипта, чтобы ваша оболочка знала, какой исполняемый файл использовать:

Или если вы хотите конкретную версию, вы можете расширить это до:

Используя ту версию, которую вы хотите (работает только для первых 2 цифр)

Тогда вам нужно пометить его как исполняемый:

Подробнее об этом см. на этой странице.

Затем, когда вы дважды щелкнете по нему, на RPI (последний раз я использовал Linux) он спрашивает, хотите ли вы выполнить его или выполнить его в терминале.

Если вы решите выполнить его без терминала, вы должны увидеть только графический интерфейс tkinter

Источник

Как запустить python скрипт в фоновом режиме?

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

Можно написать демон для systemd если в вашей операционной системе он используется.

Создаём файл демона:
sudo touch /etc/systemd/system/bot.service

[Unit] Description=My bot After=multi-user.target [Service] Type=idle ExecStart=/usr/bin/python /путь/до/скрипта/bot.py Restart=always [Install] WantedBy=multi-user.target

После этого в консоли выполяем:

sudo systemctl daemon-reload sudo systemctl enable bot.service sudo systemctl start bot.service

Чтобы остановить бот:
sudo systemctl stop bot.service
Чтобы удалить из автозагрузки:
sudo systemctl disable bot.service
Чтобы проверить работу демона:
sudo systemctl status bot.service

yahabrovec, тю. С этого и нужно было начинать 🙂

Как это делается в винде я не знаю.

trec

Автору ответа большое спасибо, ответ помог настроить скрипт.
Я же добавлю свою настройку для запуска скрипта из окружения

Суть: у меня проект юзает pipenv и надо было его запускать из окружения. В целом не суть важно через что у вас создается окружение, настроить запуск скрипта из окружения возможно следующими шагами.
1) залейте проект на сервак (/home/myuser/tel-bot)
2) ставьте окружение, узнайте полный путь к питоноу вашего окружения (/home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python)
3) запускаем скрипт из окружения: ExecStart=/bin/bash -c ‘cd /home/myuser/tel-bot && /home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python run.py’

Вот полный конфиг systemd:

[Unit] Description=super puper bot After=multi-user.target [Service] Type=idle ExecStart=/bin/bash -c 'cd /home/myuser/tel-bot && /home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python run.py' Restart=always [Install] WantedBy=multi-user.target

Дмитрий, а если сперва надо перейти в каталог питон проекта а после запустить main.py как будет выглядеть команда?

ExecStart=/bin/bash -c ‘cd /home/myuser/scrypt && /usr/bin/python3 main.py’

trec

ExecStart=/bin/bash -c 'cd /home/myuser/tel-bot && /home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python run.py'

то при остановке или перезагрузки службы, у меня скрипт не отрабатывал до конца (как это было при завершении обычной работы скрипта [ctrl + C])
Первую команду из ExecStart можно убрать. Просто в той же секции [Service] пишем:
WorkingDirectory=/home/myuser/tel-bot

В итоге скрипт норм завершается, получаем:

WorkingDirectory=/home/myuser/tel-bot ExecStart=/bin/bash -c '/home/myuser/.local/share/virtualenvs/tel-bot-31zbdxgR/bin/python run.py'

Источник

Как скрыть окно консоли в python?

Я пишу IRC-бот в Python. Я хочу создать автономные двоичные файлы для Linux и Windows. И в основном я хочу, чтобы при запуске бота окно консоли должно скрываться, и пользователь не должен был видеть это окно. Что я могу сделать для этого?

6 ответов

Просто сохраните его с расширением .pyw . Это предотвратит открытие окна консоли.

В системах Windows нет понятия «исполняемый режим». Установщик Python автоматически связывает файлы.py с файлом python.exe, чтобы двойной щелчок на файле Python запускал его как скрипт. Расширение также может быть.pyw, в этом случае окно консоли, которое обычно появляется, подавляется.

В linux просто запустите его, без проблем. В Windows вы хотите использовать исполняемый файл pythonw.

Update

Хорошо, если я понимаю вопрос в комментариях, вы спрашиваете, как сделать окно команд, в котором вы запустили бот из командной строки?

Я думаю, что правильно. В любом случае, теперь вы можете закрыть терминал.

Это не основная проблема . Основная проблема заключается в том, чтобы скрыть окно консоли, когда программа работает. Как это сделать?

Измените расширение файла на .pyw, чтобы связать его с pythonw.exe oreilly.com/catalog/pythonwin32/chapter/ch20.html.

«nohup mypythonprog &» поможет мне в Linux . но Python не будет установлен на Windows-машине. Так что «start pythonw mypythonprog» не поможет мне, я думаю.

Хорошо, если Puython не установлен, у вас есть другая проблема. Вы хотите, чтобы py2exe создавал отдельный исполняемый файл. logix4u.net/Python/Tutorials/… и py2exe.org/index.cgi/FrontPage

unix ≠ Linux, unix ≠ UNIX, вышеупомянутое решение работает также для macOS и BSD (они unix), без форматирования кода.

В Unix-системах (включая Linux, macOS и BSD)

Используйте nohup mypythonprog & , и вы можете закрыть окно терминала, не нарушая процесс. Вы также можете запустить exit , если вы работаете в облаке, и не хотите оставлять зависающий процесс оболочки.

В системах Windows

Сохраните программу с расширением .pyw , и теперь она будет открыта с помощью pythonw.exe . Нет окна оболочки.

Например, если у вас есть foo.py , вам нужно переименовать его в foo.pyw .

Если все, что вы хотите сделать, это запустить Python Script на компьютере с Windows, на котором установлен Python Interpreter, преобразование расширения вашего сохраненного Script из ‘.py’ в ‘.pyw’ должно сделать трюк,

Но если вы используете py2exe для преобразования вашего Script в автономное приложение, которое будет запускаться на любой машине Windows, вам нужно внести следующие изменения в ваш файл setup.py.

Следующий пример представляет собой простой python-GUI, созданный с использованием Tkinter:

from distutils.core import setup import py2exe setup (console = ['tkinter_example.pyw'], options = < 'py2exe' : >) 

Измените «консоль» в приведенном выше коде на «windows»..

from distutils.core import setup import py2exe setup (windows = ['tkinter_example.pyw'], options = < 'py2exe' : >) 

Это откроет только созданный графический интерфейс Tkinter и отсутствие окна консоли.

Хотя я чувствую, что этот ответ немного не по теме для вопроса, я все равно оставил его, поскольку он отвечает на следующий вопрос (ссылка ниже), который был помечен как дубликат этого вопроса.

Я на самом деле использую pyinstaller, но он имеет опцию для того же (-w) и исправил проблему для меня.

Дополнительная информация. для ситуаций, в которых потребуется решение win32gui, опубликованное Мохсеном Хаддади ранее в этой теме:

Дополнительная информация о пакете pywin32 находится на: Как использовать модуль win32gui с Python? ,

Кроме того, чтобы применить дискрецию при закрытии окна, чтобы случайно не закрыть какое-либо окно на переднем плане, разрешение можно расширить по следующим строкам:

try : import win32gui, win32con; frgrnd_wndw = win32gui.GetForegroundWindow(); wndw_title = win32gui.GetWindowText(frgrnd_wndw); if wndw_title.endswith("python.exe"): win32gui.ShowWindow(frgrnd_wndw, win32con.SW_HIDE); #endif except : pass 

Источник

Как заставить скрипт Python работать без открытия окна консоли?

Я хочу дважды щелкнуть по моему скрипту Python (который использует графический интерфейс Tkinter), и я просто хочу, чтобы он открывал окно Tkinter, а не окно консоли.

Чтобы сделать это, я изменил расширение с.py на.pyw, и это, кажется, работает нормально в Windows, но когда я дважды щелкаю свой файл.pyw на компьютере с Linux, это не работает. Это просто замерзло, и мне пришлось перезапустить мою систему.

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

2 ответа

Ты можешь использовать pyinstaller создать исполняемые файлы для разных платформ, которые вы хотите.

Синтаксис команды pyinstaller:

pyinstaller [options] script [script . ] | specfile 

В самом простом случае установите текущий каталог в местоположение вашей программы myscript.py и выполните:

PyInstaller анализирует myscript.py и:

Writes myscript.spec in the same folder as the script. Creates a folder build in the same folder as the script if it does not exist. Writes some log files and working files in the build folder. Creates a folder dist in the same folder as the script if it does not exist. Writes the myscript executable folder in the dist folder. 

В папке dist вы найдете приложение, которое вы распространяете среди своих пользователей.

Обычно вы называете один скрипт в командной строке. Если вы назовете больше, все будут проанализированы и включены в вывод. Однако первый названный сценарий предоставляет имя для файла спецификации и для исполняемой папки или файла. Его код выполняется первым во время выполнения.

Для определенных целей вы можете редактировать содержимое myscript.spec (описано в разделе «Использование файлов спецификаций»). После того, как вы сделаете это, вы называете файл спецификации PyInstaller вместо сценария:

Вы можете указать путь к файлу скрипта или спецификации, например

pyinstaller options. ~/myproject/source/myscript.py 
pyinstaller "C:\Documents and Settings\project\myscript.spec" 

Источник

Оцените статью