在Python中设置Windows命令行terminal标题

我在Windows计算机上运行了某个Python脚本的几个实例,每个实例都来自不同的目录并使用单独的shell窗口。 不幸的是,Windows为每个这样的shell窗口提供了相同的名称:

<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 W ,它是SetConsoleTitle函数的Unicode版本。 这样你就可以使用unicode,而不再需要将字符串/变量编码为字节对象。 你可以用字符串变量替换参数。

既然你只是要在Windows上运行这个(IOW,没有一个跨平台的方式来做到这一点):

  1. 下载并安装Python的Win32扩展
  2. 在脚本内部,可以使用该函数更改控制台的标题

    win32console.SetConsoleTitle("My Awesome App")

我不知道从脚本内改变cmd窗口标题的方法。

但是,如果使用start命令 ,则可以在启动脚本时设置标题。

如果启动Idle-shell是一个选项而不是cmd 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 

发布system()和基于方法的比较

绑定添加一个小的定量比较与两个张贴的方法相关的延迟开销

 |>>> 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 /自我诊断消息的替代显示,在长时间运行的过程中,可以高效地实时显示需求。

我在Windows中这样做的方式是:

 import os os.popen("title My New Title")