当我运行任何Python脚本时,我希望看到脚本的文件名出现在Windows命令行窗口的标题栏中。例如,如果我运行名为“mytest.py
”的脚本,我想在标题栏中看到“mytest
”。我希望这是自动的,所以我不必为我的每个脚本添加代码。
目前我正在尝试使用sitecustomize.py
执行此操作,因为在运行Python时,包括双击Python脚本,在脚本运行之前会导入sitecustomize
。
我已尝试获取__main__
的{{1}}和__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
答案 0 :(得分:5)
我很高兴你问过!我现在让它适用于我的脚本,而且非常酷。
以下是代码:
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,帮助解决了这个问题的“设置标题”部分。
答案 1 :(得分:1)
当我运行任何Python脚本时,我会 喜欢看脚本的文件名 出现在Windows命令行中 窗口的标题栏。例如,如果我 运行一个名为“mytest.py”的脚本,我 想在标题栏中看到“mytest”。 我希望这是自动的,所以 我不必为每个人添加代码 我的剧本。
我认为你应该通过一个模块将这个功能添加到你的所有脚本中,而不是通过黑客入侵sitecustomize.py。即使您仍想要使用sitecustomize路径,您也需要从脚本中传递__file__
,这意味着您无法为所有脚本添加一些代码。
您当然可以做的是将该代码放入模块中,然后将其导入所有python脚本中。就像我上面提到的,您需要从主脚本传递__file__
,否则您将获得模块文件名。此外,无需导入__main__
来检索__file__
。