当我运行任何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
Run Code Online (Sandbox Code Playgroud)
档案mytest.py:
import sys
print "__file__ is:", __file__
print "sys.argv is:", sys.argv
raw_input() # don't end the script immediately
Run Code Online (Sandbox Code Playgroud)
输出:
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']
Run Code Online (Sandbox Code Playgroud)
我很高兴你问!我现在让它适用于我的脚本,而且非常酷.
这是代码:
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()
Run Code Online (Sandbox Code Playgroud)
这适用于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
当我运行任何 Python 脚本时,我希望看到脚本的文件名出现在 Windows 命令行窗口的标题栏中。例如,如果我运行一个名为“mytest.py”的脚本,我希望在标题栏中看到“mytest”。我希望这是自动的,这样我就不必向每个脚本添加代码。
我认为您应该通过模块将此功能添加到所有脚本中,而不是将其侵入 sitecustomize.py。此外,即使您仍然想要进入 sitecustomize 路径,您也需要__file__从脚本中传递,这意味着您将无法向所有脚本中添加一些代码。
您当然可以做的就是将该代码放入模块中,然后将其导入到所有 python 脚本中。就像我上面提到的,您需要__file__从主脚本传递,否则您将获得模块文件名。也不需要导入__main__来检索__file__。
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |