2011-02-01 66 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