如何从 sitecustomize.py 获取脚本的名称/文件?

2024-04-05

当我运行任何 Python 脚本时,我希望看到脚本的文件名出现在 Windows 命令行窗口的标题栏中。例如,如果我运行一个名为“mytest.py“, 我想看看 ”mytest” 在标题栏中。我希望这是自动的,这样我就不必向每个脚本添加代码。

目前我正在尝试这样做sitecustomize.py,因为当 Python 运行时,包括双击 Python 脚本,sitecustomize在脚本运行之前导入。

我试过了__main__'s __file__ and sys.argv, but sitecustomize也没有看到:

file sitecustomize.py:

import __main__, sys
print "hasattr __main__.__file__:", hasattr(__main__, "__file__")
print "hasattr sys.argv:", hasattr(sys, "argv")
print "-" * 60

file mytest.py:

import sys
print "__file__ is:", __file__
print "sys.argv is:", sys.argv
raw_input() # don't end the script immediately

output:

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 to SetConsoleTitleW(最后一个字母从 A 变为 W)。

它是如何工作的:由于 sys.argv 对象尚存在,我创建一个对象并将其分配给 sys.argv;然后,当 Python 将实际的 argv 分配给 sys.argv 时,我的对象被抛出,并且__del__方法被调用;这__del__然后方法就能够访问真实的 argv 并相应地设置标题栏。我设置 1 秒睡眠只是为了避免任何可能的竞争条件,但我不确定这是必要的。如果您不想查看所有命令行参数,您可以以任何您喜欢的方式预处理命令。

我感谢 python-win32 邮件列表上的人们,特别是 Thomas Heller,感谢他们帮助解决了这个问题的“设置标题”部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 sitecustomize.py 获取脚本的名称/文件? 的相关文章

随机推荐