特定のPythonスクリプトのいくつかのインスタンスをWindowsマシンで実行しています。それぞれが異なるディレクトリから、別々のシェルウィンドウを使用しています。残念ながら、Windowsはこれらの各シェルウィンドウに同じ名前を付けています。
<User>: C:\Windows\system32\cmd.exe - <script.py>
Pythonコマンドを使用してこの名前を別の名前に設定することは可能ですか?
特定のPythonスクリプトのいくつかのインスタンスをWindowsマシンで実行しています。それぞれが異なるディレクトリから、別々のシェルウィンドウを使用しています。残念ながら、Windowsはこれらの各シェルウィンドウに同じ名前を付けています。
<User>: C:\Windows\system32\cmd.exe - <script.py>
Pythonコマンドを使用してこの名前を別の名前に設定することは可能ですか?
これは、WindowsのPython2.7で機能します。
>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")
Windowsでは、単純なコンソールコマンドで十分です。
from os import system
system("title " + myCoolTitle)
素晴らしくて簡単。
担当者が足りないため、上記の投稿にコメントを追加することはできません。新しい投稿としてです。
Python 3では、次を使用できます。
import ctypes
ctypes.windll.kernel32.SetConsoleTitleW("My New Title")
私はこの回答を編集しました。現在、 SetConsoleTitle関数のUnicodeバージョンであるSetConsoleTitleWを使用していることに注意してください。このようにして、Unicodeを使用でき、文字列/変数をバイトオブジェクトにエンコードする必要がなくなります。引数を文字列変数に置き換えるだけです。
これはWindowsでのみ実行するため(IOW、これを行うためのクロスプラットフォームの方法はありません):
スクリプト内で、関数を使用してコンソールのタイトルを変更できます
win32console.SetConsoleTitle("My Awesome App")
cmd
スクリプト内からウィンドウタイトルを変更する方法を知りません。
ただし、start
コマンドを使用すると、スクリプトの起動時にタイトルを設定できます。
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]
約0.5ミリ秒(ただし数十ミリ秒ではない)を費やす可能性がある場合、このwindll.kernel32
方法は有望であり、WatchDOG / StateVARs / ProgressLOG /自動自己診断メッセージの代替表示に適している可能性があり、効率的に表示されます長時間実行されるプロセス中の、ソフトなリアルタイムのニーズ。
アイドルシェルを開始することがcmdシェルの代わりのオプションである場合:
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
標準のエスケープシーケンスをコンソール(stdout)に出力することにより、任意の言語内からウィンドウタイトルを変更できるようになりました。バッチファイルの実際の例を次に示します。コマンドプロンプトを変更して、現在のディレクトリ名のみを表示しますが、 ESCの閉じかっこ2セミコロンyour-titleを印刷するだけです。ここではBEL(control-G)で実行できます。また、簡単に適応できるPHPの例:
function windowTitle($title)
{printf("\033]2;%s\007", $title);}
XYZの代わりに、保持するウィンドウ名を入力します。
import os
os.system("title XYZ")
使用する:
import ctypes
ctypes.windll.kernel32.SetConsoleTitleW('new title')
または:
import os
os.system('title new title')