如何在Python中获取操作系统的argv[0](而不是sys.argv[0])?
我想在一个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模块才能获取这个值吗?
编辑:我也在这里问过这个问题,但没有得到有用的回答。
1 个回答
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的情况。bash
中有个小问题