如何在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模块来获取此值吗?

编辑:
同时要求(但不帮忙,回答)在这里


问题答案:

在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。这是第一次。