我在 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 命令将此名称设置为其他名称?
这适用于 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
command ,则可以在启动脚本时设置标题。
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 / auto-self-diagnostic 消息,被有效地显示在长时间运行的过程中,满足软实时需求。
如果启动 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
现在可以通过将标准转义序列输出到控制台 (stdout) 从任何语言中更改窗口标题。这是批处理文件中的一个工作示例,将命令提示符更改为仅显示当前目录名称,但是只需打印 ESC close-bracket 2 semicolon your-title-here BEL (control-G) 即可。也是一个易于改编的 PHP 示例:
function windowTitle($title)
{printf("\033]2;%s\007", $title);}
利用:
import ctypes
ctypes.windll.kernel32.SetConsoleTitleW('new title')
或者:
import os
os.system('title new title')
代替 XYZ,输入要保留的窗口名称。
import os
os.system("title XYZ")