当我运行任何 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/