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

标签 python python-3.x

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

相关文章:

python - 如何在Python中从 map 对象(<map at 0x7f8adefd7c50>)获取二进制值?

python - 如何从 Python 脚本向 Google App Script API 传递参数?

python - Python 中的 PDFminer

python pptx 在饼图中显示类别值

python - 从文件中绘制

python - 通过属性比较对象实例是否相等

python - 如何在 Python 3 中相应地将括号放入列表中?

python - 为 int 覆盖 __repr__ 或 pprint

python - 如何停止在 visual studio 代码中执行 python 脚本?

python - 如何使用python 3.5.3在树莓派中安装tensorflow