我在 Windows 机器上运行了几个特定 Python 脚本实例,每个脚本实例来自不同的目录,并使用单独的 shell 窗口。不幸的是,Windows 让这些 shell 窗口都具有相同的名称:
<User>: C:\Windows\system32\cmd.exe - <script.py>
通过Python命令,是否可以将此名称设置为其他内容?
我在 Windows 机器上运行了几个特定 Python 脚本实例,每个脚本实例来自不同的目录,并使用单独的 shell 窗口。不幸的是,Windows 让这些 shell 窗口都具有相同的名称:
<User>: C:\Windows\system32\cmd.exe - <script.py>
通过Python命令,是否可以将此名称设置为其他内容?
from os import system
system("title " + myCoolTitle)
简单易懂。
system("cls")
来清除窗口中的旧杂物。 - dotswe这适用于 Windows 下的 Python2.7。
>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")
ctypes.windll
(在 ctypes 中是最糟糕的想法)时出现缓存原型,建议使用以下代码:kernel32 = ctypes.WinDLL('kernel32', use_last_error=True); kernel32.SetConsoleTitleW(u"My New Title")
。还需要设置一个带有 (result, func, args)
签名的 errcheck
函数。当结果为假(即调用失败)时,它应该 raise ctypes.WinError(ctypes.get_last_error())
,这样可以使用异常进行 Python 编程而不是简单的 C 错误码。 - Eryk Sun因为声望值不够,我无法在上面的帖子中添加评论-所以新建一个帖子。
在Python 3中,您可以使用:
import ctypes
ctypes.windll.kernel32.SetConsoleTitleW("My New Title")
我编辑了这个答案:请注意,它现在使用的是SetConsoleTitleW,这是SetConsoleTitle函数的Unicode版本。 这样你就可以使用Unicode而不必将字符串/变量编码为字节对象。你只需要用字符串变量替换参数即可。
考虑到这个操作只会在Windows上运行(也就是说,没有跨平台的方法来实现这个):
在你的脚本中,你可以使用函数更改控制台的标题。
win32console.SetConsoleTitle("我的超级应用")
system()
和windll
方法的比较尝试对两种已发布方法中与延迟开销相关的小量化比较:
|>>> 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 /自动自诊断消息的替代显示,在长时间运行的过程中高效地显示软实时需求。使用:
import ctypes
ctypes.windll.kernel32.SetConsoleTitleW('new title')
或者:
import os
os.system('title new title')
ctypes
比os.system
快得多。 - Jay Dadhania我不知道如何在脚本内部更改cmd
窗口标题。
但是,如果你使用start
命令启动脚本,你可以设置标题。
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
function windowTitle($title)
{printf("\033]2;%s\007", $title);}