2011-02-01 71 views
9

我想在Python程序中获得操作系统argv [0]的真实值。 Python的sys.argv [0]不是这个值:它是正在执行的Python脚本的名称(有一些例外)。我要的是一个foo.py当作为如何在Python中获得操作系统的argv [0](不是sys.argv [0])?

琐碎的程序

#! /usr/bin/env python 
import sys 
print sys.argv[0] 

执行将打印 “foo.py” 而不是将打印 “somestring”。

有谁知道如何获得这个? Python C API中有一些相关的功能:例如Py_GetProgramName。但是这似乎并没有在任何地方暴露于Python世界。 Py_GetProgramFullPath不依赖于argv [0],而是试图获取Python解释器的路径。 (这个值传播到sys.executable,所以这个变量也是不正确的。)我真的必须编写一个C模块来获得这个值吗?

编辑:还问(但没有帮助回答)here

回答

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命令是一个错误替换的外壳闭合解释器退出后的终端会话。这是第一次。

+0

这不是一个bash的bug,`exec`命令用另一个程序替换了shell。 – interjay 2011-02-01 21:08:08