我在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,没有一个跨平台的方式来做到这一点):
在脚本内部,可以使用该函数更改控制台的标题
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")