web-dev-qa-db-ja.com

PythonでWindowsコマンドライン端末のタイトルを設定します

Windowsマシンで特定のPythonスクリプトの複数のインスタンスを実行しており、それぞれ異なるディレクトリから、別のシェルウィンドウを使用しています。残念ながら、Windowsはこれらの各シェルウィンドウに同じ名前を付けています。

<User>: C:\Windows\system32\cmd.exe - <script.py>

Pythonコマンドを使用して、この名前を別の名前に設定できますか?

22
Jonathan

これは、WindowsのPython2.7で機能します。

>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")
35
Jeffrey Harper

Windowsでは、単純なコンソールコマンドで十分です。

from os import system
system("title "+myCoolTitle)

とても簡単です。

31
ShouravBR

十分な担当者がいないため、上記の投稿にコメントを追加することはできません-新しい投稿として。

Python 3で使用できます:

import ctypes
ctypes.windll.kernel32.SetConsoleTitleW("My New Title")

私はこの回答を編集しました:備考:SetConsoleTitle[〜#〜] w [〜#〜]を使用するようになりました。これは、Unicodeバージョンの SetConsoleTitle 関数。このようにして、ユニコードを使用でき、文字列/変数をバイトオブジェクトにエンコードする必要がなくなります。引数を文字列変数に置き換えるだけです。

16
user136036

これはWindows(IOW、これを実行するためのクロスプラットフォームの方法はありません)でのみ実行する予定なので、次のようにします。

  1. Python用の Win32拡張機能をダウンロードしてインストールします
  2. スクリプト内で、 function を使用してコンソールのタイトルを変更できます

    win32console.SetConsoleTitle("My Awesome App")

5
bgporter

スクリプト内からcmdウィンドウタイトルを変更する方法を知りません。

ただし、 startコマンド を使用すると、スクリプトの起動時にタイトルを設定できます。

2
NPE

投稿されたsystem()およびwindllベースのメソッドの比較

投稿された2つのメソッドに関連付けられた待機時間のオーバーヘッドの小さな定量的比較を追加するために結び付けます。

|>>> from zmq import Stopwatch
|>>> aSWX = Stopwatch()

|>>> from os import system
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  15149L [us]
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  15347L [us]
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  15000L [us]
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  14674L [us]
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  14774L [us]
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  14551L [us]
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  14633L [us]
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  15202L [us]
|>>> aSWX.start();system( 'TITLE os_Shell_CMD_TITLE_TXT');aSWX.stop()  14889L [us]

|>>> from ctypes import windll
|>>> aSWX.start();windll.kernel32.SetConsoleTitleA('DLL');aSWX.stop()   5767L [us]
|>>> aSWX.start();windll.kernel32.SetConsoleTitleA('DLL');aSWX.stop()    643L [us]
|>>> aSWX.start();windll.kernel32.SetConsoleTitleA('DLL');aSWX.stop()    573L [us]
|>>> aSWX.start();windll.kernel32.SetConsoleTitleA('DLL');aSWX.stop()    749L [us]
|>>> aSWX.start();windll.kernel32.SetConsoleTitleA('DLL');aSWX.stop()    689L [us]
|>>> aSWX.start();windll.kernel32.SetConsoleTitleA('DLL');aSWX.stop()    651L [us]

ミリ秒の約半分(ただし数十ではない)を費やす可能性がある場合windll.kernel32メソッドは有望であると思われ、WatchDOG/StateVARs/ProgressLOG /自動自己診断メッセージの代替表示に役立ち、長時間実行されているプロセス中にソフトリアルタイムのニーズで効率的に表示されます。

1
user3666197

starting the Idle-Shell がコマンドシェルではなくオプションの場合:

idle.py [-c command] [-d] [-e] [-s] [-t title] [arg] ...

-c command  run this command
-d          enable debugger
-e          edit mode; arguments are files to be edited
-s          run $IDLESTARTUP or $PYTHONSTARTUP first
-t title    set title of Shell window
1
Remi

標準のエスケープシーケンスをコンソール(stdout)に出力することで、任意の言語からウィンドウタイトルを変更できるようになりました。バッチファイルの実際の例を次に示します 現在のディレクトリ名のみを表示するようにコマンドプロンプトを変更 ただし、ESC close-bracket 2セミコロンyour-title-here BEL(control-G)を印刷するだけで実行できます。また、簡単に適応できるPHPの例:

function windowTitle($title)
  {printf("\033]2;%s\007", $title);}
0
mike_n