pythonでコンソールウィンドウを隠すには?

私はPythonでIRCボットを書いています。

Linux用とWindows用のスタンドアローンバイナリを作りたいのですが、どうすればいいですか?そして、主にボットが起動したときにコンソールウィンドウを隠して、ユーザがウィンドウを見ることができないようにしたいです。

そのためにはどうしたらいいのでしょうか?

質問へのコメント (1)

拡張子を.pywにして保存するだけです。これで、コンソールウィンドウが開かなくなります。

Windowsでは、「実行可能モード」という概念はありません。Pythonのインストーラは自動的に.pyファイルをpython.exeと関連付け、Pythonファイルをダブルクリックするとスクリプトとして実行されるようにします。拡張子は.pywとすることもでき、その場合、通常表示されるコンソールウィンドウは抑制されます

2.2.2節末尾の説明

解説 (2)

linuxでは、そのまま実行すれば問題ありません。 Windowsでは、pythonwの実行ファイルを使用したい。

更新情報

なるほど、コメントの質問を理解すると、コマンドラインからbotを起動したコマンドウィンドウをその後消すにはどうしたらいいかということですね?

  • UNIX (リナックス)

$ nohup mypythonprog &

  • Windows

C:/> start pythonw mypythonprog

その通りだと思います。 いずれにせよ、これでターミナルを閉じることができます。

解説 (8)

Unix系(Linux、macOS、BSDを含む)の場合

nohup mypythonprog &を使用すると、プロセスを中断することなくターミナルウィンドウを閉じることができます。また、クラウド上で動作していて、シェルプロセスをぶら下げたままにしたくない場合はexit` を実行することもできます。

Windows システムの場合

プログラムを拡張子 .pyw で保存すると、pythonw.exe で開かれるようになります。シェルウィンドウはありません。

例えば、foo.pyがあれば、foo.pywにリネームする必要があります。

解説 (0)

PythonインタープリターがインストールされているWindowsコンピューターでPythonスクリプトを実行することだけを行う場合は、保存したスクリプトの拡張機能を「.py」から「.pyw」に変換するだけでうまくいくはずです。

ただし、py2exeを使用してスクリプトを任意のWindowsマシンで実行されるスタンドアロンアプリケーションに変換する場合は、「setup.py」ファイルに次の変更を加える必要があります。

次の例は、Tkinterを使用して作成された単純なpython-GUIです。

from distutils.core import setup
import py2exe
setup (console = ['tkinter_example.pyw'],
       options = { 'py2exe' : {'packages':['Tkinter']}})

上記のコードの「コンソール」を「ウィンドウ」に変更します。.

from distutils.core import setup
import py2exe
setup (windows = ['tkinter_example.pyw'],
       options = { 'py2exe' : {'packages':['Tkinter']}})

これにより、Tkinterで生成されたGUIのみが開き、コンソールウィンドウは開きません。

解説 (3)

これはあなたのコンソールを隠します。 最初にこの行をコードに実装して、最初にコンソールの非表示を開始します。

import win32gui, win32con

The_program_to_hide = win32gui.GetForegroundWindow()
win32gui.ShowWindow(The_program_to_hide , win32con.SW_HIDE)
解説 (6)

いくつかの追加情報。 このスレッドの前半でMohsen Haddadiが投稿したwin32guiソリューションが必要な状況の場合:

python 361以降、win32gui& win32conはpython stdライブラリの一部ではありません。 それらを使用するには、pywin32パッケージをインストールする必要があります。 pipを介して可能になりました。

pywin32パッケージの背景情報の詳細は、https://stackoverflow.com/questions/6624672/how-to-use-the-win32gui-module-with-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
解説 (4)