Я пишу бота IRC на Python.
Я хочу зробити окремі двійкові файли для Linux та Windows. І головним чином я бажаю, щоб при ініціюванні бота вікно консолі ховалося, а користувач не міг бачити вікно.
Що я можу зробити для цього?
Я пишу бота IRC на Python.
Я хочу зробити окремі двійкові файли для Linux та Windows. І головним чином я бажаю, щоб при ініціюванні бота вікно консолі ховалося, а користувач не міг бачити вікно.
Що я можу зробити для цього?
Відповіді:
Просто збережіть його з .pyw
розширенням. Це запобіжить відкриттю вікна консолі.
У системах Windows поняття "виконуваний режим" не існує. Інсталятор Python автоматично пов'язує файли .py з python.exe, так що подвійне клацання файлу Python запускає його як сценарій. Розширенням також може бути .pyw, у такому випадку вікно консолі, яке зазвичай з’являється, пригнічується.
У Linux просто запустіть, не проблема. У Windows ви хочете використовувати виконуваний файл pythonw.
Гаразд, якщо я розумію питання в коментарях, ви запитуєте, як змусити пізніше зникнути командне вікно, в якому ви запустили бота з командного рядка?
$ nohup mypythonprog &
C: /> запустити pythonw mypythonprog
Я думаю , це правильно. У будь-якому випадку, тепер ви можете закрити термінал.
Використовуйте nohup mypythonprog &
, і ви можете закрити вікно терміналу, не порушуючи процес. Ви також можете бігатиexit
якщо ви працюєте в хмарі і не хочете залишати висячий процес оболонки.
Збережіть програму з .pyw
розширенням, і тепер вона відкриється за допомогою pythonw.exe
. Немає вікна оболонки.
Наприклад, якщо у вас є foo.py
, вам потрібно перейменувати його на foo.pyw
.
Це приховає вашу консоль. Спочатку впровадьте ці рядки у свій код, щоб спочатку почати приховувати консоль.
import win32gui, win32con
the_program_to_hide = win32gui.GetForegroundWindow()
win32gui.ShowWindow(the_program_to_hide , win32con.SW_HIDE)
Оновлення в травні 2020 року:
Якщо у вас виникли проблеми з pip install win32con
командним рядком, ви можете просто. pip install pywin32
Потім у своєму сценарії python виконайте import win32.lib.win32con as win32con
замість import win32con
.
Щоб знову показати свою програму, win32con.SW_SHOW
чудово працює:
win32gui.ShowWindow(the_program_to_hide , win32con.SW_SHOW)
Якщо все, що ви хочете зробити, це запустити ваш Python Script на комп’ютері з ОС Windows, на якому встановлений інтерпретатор Python, перетворення розширення збереженого сценарію з '.py' в '.pyw' має зробити цю справу.
Але якщо ви використовуєте py2exe для перетворення сценарію в автономну програму, яка запускається на будь-якій машині Windows, вам потрібно буде внести наступні зміни у файл 'setup.py'.
Наступний приклад - простий графічний інтерфейс python, створений за допомогою Tkinter:
from distutils.core import setup
import py2exe
setup (console = ['tkinter_example.pyw'],
options = { 'py2exe' : {'packages':['Tkinter']}})
Змініть "console" у коді вище на "windows" ..
from distutils.core import setup
import py2exe
setup (windows = ['tkinter_example.pyw'],
options = { 'py2exe' : {'packages':['Tkinter']}})
Це відкриє лише графічний інтерфейс, згенерований Tkinter, а не вікно консолі.
Деякі додаткові відомості. для ситуацій, які потребуватимуть рішення win32gui, опубліковане Мохсеном Хаддаді раніше в цій темі:
Починаючи з python 361, win32gui та win32con не є частиною бібліотеки std python. Для їх використання потрібно встановити пакет pywin32; тепер можливо через pip.
Більше довідкової інформації про пакет 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
import os,sys
if sys.args[-1]!='Y': os.system('pythonw myprog.py Y') # or whatever your program's name is
# Your program's code