当我运行任何Python脚本时,我希望看到脚本的文件名出现在Windows命令行窗口的标题栏中。例如,如果我运行一个名为“mytest.py
”的脚本,我想在标题栏中看到“mytest
”。我希望这是自动的,因此不必在每个脚本中都添加代码。
目前,我正在尝试使用sitecustomize.py
进行此操作,因为运行Python(包括双击Python脚本)时,会在脚本运行之前导入sitecustomize
。
我尝试获取__main__
的__file__
和sys.argv
,但sitecustomize
均未显示:
文件sitecustomize.py
:
import __main__, sys
print "hasattr __main__.__file__:", hasattr(__main__, "__file__")
print "hasattr sys.argv:", hasattr(sys, "argv")
print "-" * 60
文件
mytest.py
:import sys
print "__file__ is:", __file__
print "sys.argv is:", sys.argv
raw_input() # don't end the script immediately
输出:
hasattr __main__.__file__: False
hasattr sys.argv: False
------------------------------------------------------------
__file__ is: C:\Documents and Settings\Owner\Desktop\mytest.py
sys.argv is: ['C:\\Documents and Settings\\Owner\\Desktop\\mytest.py']
最佳答案
我很高兴你问!现在,我可以将其用于我的脚本,而且非常酷。
这是代码:
import sys
import time
from ctypes import windll
class SetTitle(object):
def __del__(self):
time.sleep(1)
command = ' '.join(sys.argv)
windll.kernel32.SetConsoleTitleA(command)
sys.argv = SetTitle()
这是针对Python 2.x的-对于3.x,您需要将
SetConsoleTitleA
更改为SetConsoleTitleW
(最后一个字母从A更改为W)。工作原理:由于sys.argv对象尚不存在,因此我创建了一个对象并将其分配给sys.argv。然后,当Python将实际的argv分配给sys.argv时,将抛出我的对象,并调用
__del__
方法;然后__del__
方法就可以访问实际的argv并相应地设置标题栏。我为了避免任何可能的比赛状况而睡了1秒钟,但我不确定是否有必要。如果您不想看到所有命令行参数,则可以按照自己喜欢的方式对命令进行预处理。我感谢python-win32邮件列表中的人员,尤其是Thomas Heller,帮助解决了该问题的“设置标题”部分。