Ответ 1
Это работает для Python2.7 под Windows.
>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")
Я запускаю несколько экземпляров определенного Python script на машине Windows, каждый из другого каталога и используя отдельные окна оболочки. К сожалению, Windows дает каждому из этих окон оболочки одно и то же имя:
<User>: C:\Windows\system32\cmd.exe - <script.py>
Можно ли установить это имя на что-то еще через команду Python?
Это работает для Python2.7 под Windows.
>>> import ctypes
>>> ctypes.windll.kernel32.SetConsoleTitleA("My New Title")
В Windows достаточно выполнить консольную команду:
from os import system
system("title "+myCoolTitle)
Приятно и легко.
Из-за недостаточной репутации я не могу добавить комментарий к вышеуказанному сообщению - так как новый пост.
В Python 3 вы можете использовать:
import ctypes
ctypes.windll.kernel32.SetConsoleTitleW("My New Title")
Я отредактировал этот ответ: пожалуйста, отметьте, что теперь он использует SetConsoleTitle W, который является Unicode-версией SetConsoleTitle. Таким образом, вы можете использовать unicode и больше не должны кодировать строку/переменную для байтового объекта. Вы можете просто заменить аргумент на строковую переменную.
Поскольку вы будете запускать это только в Windows (IOW, там нет межплатформенного способа сделать это):
Внутри вашего script вы можете изменить название консоли с помощью функции
win32console.SetConsoleTitle("My Awesome App")
Я не знаю, как изменить заголовок окна cmd
из script.
Однако вы можете установить заголовок при запуске script, если вы используете команду start
.
Если запуск 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
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/авто-самодиагностики, которые эффективно отображаются в режиме реального времени в режиме реального времени.
Мой способ сделать это в Windows:
import os
os.popen("title My New Title")