Установить заголовок терминала командной строки Windows в Python - PullRequest
19 голосов
/ 12 сентября 2011

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

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

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

Ответы [ 8 ]

33 голосов
/ 27 сентября 2012

Это работает для Python2.7 под Windows.

>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")
27 голосов
/ 19 апреля 2012

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

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

Приятно и просто.

15 голосов
/ 01 января 2014

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

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

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

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

5 голосов
/ 12 сентября 2011

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

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

    win32console.SetConsoleTitle("My Awesome App")

2 голосов
/ 12 сентября 2011

Мне неизвестен способ изменения заголовка окна cmd из скрипта.

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

1 голос
/ 11 октября 2015

Сравнение опубликованных методов 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 / самодиагностики, эффективно отображаемые в режиме реального времени, во время длительных процессов.

1 голос
/ 12 сентября 2011

Если запуск 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
0 голосов
/ 10 октября 2018

Теперь можно изменять заголовок окна из любого языка, выводя стандартную escape-последовательность на консоль (stdout).Вот рабочий пример из пакетного файла Измените командную строку, чтобы показать только текущее имя каталога , однако, просто напечатав ESC с закрывающей скобкой 2 точка с запятой, ваш BEL (control-G) сделает это.Также легко адаптируемый пример PHP:

function windowTitle($title)
  {printf("\033]2;%s\007", $title);}
...