Установить заголовок терминала командной строки Windows в Python

Я запускаю несколько экземпляров определенного скрипта Python на машине Windows, каждый из другого каталога и с помощью отдельной оболочки windows. К сожалению, Windows дает каждому из этих окон оболочки одно и то же имя:

<User>: C:Windowssystem32cmd.exe - <script.py>

можно ли установить это имя на что-то еще с помощью команды Python?

7 ответов


это работает для python2.7 под Windows.

>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")

в Windows достаточно простой консольной команды:

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

приятно и легко.


из - за недостаточного rep я не могу добавить комментарий к вышеуказанному сообщению-так как новый пост.

на Python 3 вы можете использовать:

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

я отредактировал этот ответ: обратите внимание, что теперь он использует SetConsoleTitleW, который является версией Unicode SetConsoleTitle. Таким образом, вы можете использовать unicode и больше не кодировать строку/переменную в объект byte. Вы можете просто заменить аргумент строкой переменная.


поскольку вы собираетесь запускать это только в Windows (IOW, нет кросс-платформенного способа сделать это):

  1. скачать и установить Win32 расширения для python
  2. внутри вашего скрипта, вы можете изменить заголовок консоли с функции

    win32console.SetConsoleTitle("My Awesome App")


Я не знаю, как изменить cmd заголовок окна из скрипта.

однако вы можете установить заголовок при запуске скрипта, если используете start команда.


Если запуск Idle-shell является опцией вместо оболочки cmd:

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

сравнение комментария 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 метод кажется многообещающим и может служить лучше для альтернативного отображения сторожевого пса / StateVARs / ProgressLOG / auto-self-diagnostic сообщения, эффективно отображаемые в режиме реального времени, во время длительных процессов.