我想在Python程序中获取操作系统argv [0]的真实值。 Python的sys.argv [0]不是这个值:它是正在执行的Python脚本的名称(有一些例外)。我想要的是一个foo.py,当执行
时会打印“somestring”exec -a "somestring" python foo.py
琐碎的程序
#! /usr/bin/env python
import sys
print sys.argv[0]
将改为打印“foo.py”。
有谁知道如何获得这个? Python C API中有一些相关的函数:例如Py_GetProgramName。但这似乎并没有暴露在Python世界的任何地方。 Py_GetProgramFullPath使用argv [0],但是它试图获取Python解释器的路径。 (此值传播到sys.executable,因此该变量也不正确。)我是否真的必须编写C模块才能获得此值?
修改:还询问(但没有得到帮助)here。
答案 0 :(得分:7)
在Linux上,您可以阅读/proc/self/cmdline
:
#!/usr/bin/env python
import sys
print sys.argv[0]
f = open('/proc/self/cmdline', 'rb')
cmdline = f.read()
f.close()
print repr(cmdline.split('\x00'))
输出是:
$ bash
$ exec -a "somestring" python foo.py
foo.py
['somestring', 'foo.py', '']
中似乎存在错误exec命令会在解释器退出后替换关闭终端会话的shell。这是第一次打击。bash