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

pkg*_*kgw 9 python

我想在Python程序中获得操作系统的argv [0]的真正价值.Python的sys.argv [0]不是这个值:它是正在执行的Python脚本的名称(有一些例外).我想要的是一个foo.py,它会在执行时打印"somestring"

exec -a "somestring" python foo.py
Run Code Online (Sandbox Code Playgroud)

琐碎的计划

#! /usr/bin/env python
import sys
print sys.argv[0]
Run Code Online (Sandbox Code Playgroud)

将打印"foo.py"而不是.

有谁知道如何获得这个?Python C API中有一些相关的函数:例如Py_GetProgramName.但这似乎并没有暴露在Python世界的任何地方.Py_GetProgramFullPath使用argv [0],但是它试图获取Python解释器的路径.(此值传播到sys.executable,因此该变量也不正确.)我是否真的必须编写C模块才能获得此值?

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

vz0*_*vz0 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'))
Run Code Online (Sandbox Code Playgroud)

输出是:

$ bash
$ exec -a "somestring" python foo.py 
foo.py
['somestring', 'foo.py', '']
Run Code Online (Sandbox Code Playgroud)

似乎有一个错误bash exec命令替换解释器退出后关闭终端会话的shell.那是第一次打击.