gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:47:39 25 4
gpt4 key购买 nike

当我运行任何 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 秒 sleep ,但我不确定是否有必要。如果你不想看到所有的命令行参数,你可以用任何你喜欢的方式预处理命令。

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

关于python - 如何从 sitecustomize.py 获取脚本的名称/文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6485678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com