我正在Windows机器上运行某个Python脚本的几个实例,每个实例来自不同的目录并使用单独的shell窗口。不幸的是,Windows为每个shell窗口提供了相同的名称:
<User>: C:\Windows\system32\cmd.exe - <script.py>
是否可以通过Python命令将此名称设置为其他名称?
答案 0 :(得分:32)
这适用于Windows下的Python2.7。
>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")
答案 1 :(得分:27)
在Windows上,一个简单的控制台命令就足够了:
from os import system
system("title "+myCoolTitle)
尼斯&amp;容易。
答案 2 :(得分:15)
由于代表不够,我无法在上述帖子中添加评论 - 所以作为新帖子。
在 Python 3 中,您可以使用:
import ctypes
ctypes.windll.kernel32.SetConsoleTitleW("My New Title")
我编辑了这个答案:请注意,它现在使用SetConsoleTitle W ,这是SetConsoleTitle函数的Unicode版本。 这样您就可以使用unicode,不再需要将字符串/变量编码为字节对象。您可以使用字符串变量替换参数。
答案 3 :(得分:5)
因为你只是在Windows上运行它(IOW,没有跨平台的方法来执行此操作):
在脚本内部,您可以使用function
更改控制台的标题 win32console.SetConsoleTitle("My Awesome App")
答案 4 :(得分:2)
我不知道如何在脚本中更改cmd
窗口标题。
但是,如果您使用start
command,则可以在启动脚本时设置标题。
答案 5 :(得分:1)
如果starting the 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
答案 6 :(得分:1)
system()
&amp;的比较基于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 /自动自诊断消息,在长时间运行的过程中有效地显示在软实时需求中。
答案 7 :(得分:0)
现在可以通过将标准转义序列输出到控制台(stdout),从任何语言中更改窗口标题。这是一个来自批处理文件Change command prompt to only show current directory name的工作示例,但是只需打印ESC右括号2分号“您的标题”即可,在这里BEL(control-G)即可。也是一个易于修改的PHP示例:
function windowTitle($title)
{printf("\033]2;%s\007", $title);}
答案 8 :(得分:0)
代替XYZ,输入要保留的窗口名称。
import os
os.system("title XYZ")