如何在Python中获取操作系统的argv [0](而不是sys.argv [0])?

时间:2011-02-01 20:44:52

标签: python

我想在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

1 个答案:

答案 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', '']

bash 中似乎存在错误exec命令会在解释器退出后替换关闭终端会话的shell。这是第一次打击。