Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

В Windows достаточно выполнить консольную команду:

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

    win32console.SetConsoleTitle("My Awesome App")

Ответ 5

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

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

Ответ 6

Если запуск Idle-оболочки является опцией вместо оболочки 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

Ответ 7

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

Ответ 8

Мой способ сделать это в Windows:

import os
os.popen("title My New Title")