27

我在 Windows 机器上运行某个 Python 脚本的多个实例,每个实例都来自不同的目录并使用单独的 shell 窗口。不幸的是,Windows 为这些 shell 窗口中的每一个赋予了相同的名称:

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

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

4

10 回答 10

44

这适用于 Windows 下的 Python2.7。

>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")
于 2012-09-27T16:56:04.580 回答
42

在 Windows 上,一个简单的控制台命令就足够了:

from os import system
system("title " + myCoolTitle)

好,易于。

于 2012-04-19T13:50:14.920 回答
23

由于没有足够的代表,我无法在上面的帖子中添加评论 - 所以作为一个新帖子。

Python 3中,您可以使用:

import ctypes
ctypes.windll.kernel32.SetConsoleTitleW("My New Title")

我编辑了这个答案:请注意,它现在使用 SetConsoleTitle W,它是SetConsoleTitle函数的 Unicode 版本。这样您就可以使用 unicode 而不再需要将字符串/变量编码为字节对象。您可以将参数替换为字符串变量。

于 2014-01-01T01:33:25.240 回答
6

由于您只会在 Windows 上运行它(IOW,没有跨平台的方式来执行此操作):

  1. 下载并安装适用于 python 的 Win32 扩展
  2. 在脚本内部,您可以使用函数更改控制台的标题

    win32console.SetConsoleTitle("My Awesome App")

于 2011-09-12T13:04:46.433 回答
3

我不知道cmd从脚本中更改窗口标题的方法。

但是,如果您使用startcommand ,则可以在启动脚本时设置标题。

于 2011-09-12T11:53:27.557 回答
3

已发布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 消息,被有效地显示在长时间运行的过程中,满足软实时需求。

于 2015-10-11T01:13:33.310 回答
2

如果启动 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
于 2011-09-12T11:54:24.760 回答
0

现在可以通过将标准转义序列输出到控制台 (stdout) 从任何语言中更改窗口标题。这是批处理文件中的一个工作示例,将命令提示符更改为仅显示当前目录名称,但是只需打印 ESC close-bracket 2 semicolon your-title-here BEL (control-G) 即可。也是一个易于改编的 PHP 示例:

function windowTitle($title)
  {printf("\033]2;%s\007", $title);}
于 2018-10-09T22:30:30.673 回答
0

利用:

import ctypes
ctypes.windll.kernel32.SetConsoleTitleW('new title')

或者:

import os
os.system('title new title')
于 2021-12-06T06:37:30.450 回答
0

代替 XYZ,输入要保留的窗口名称。

import os
os.system("title XYZ")
于 2020-08-28T04:42:59.543 回答