在Python中设置Windows命令行终端标题

时间:2011-09-12 11:40:07

标签: python windows low-latency

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

<User>: C:\Windows\system32\cmd.exe - <script.py>

是否可以通过Python命令将此名称设置为其他名称?

9 个答案:

答案 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,没有跨平台的方法来执行此操作):

  1. 下载&amp;安装Win32 extensions for python
  2. 在脚本内部,您可以使用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")