2011-02-01 13 views
9

मैं पाइथन प्रोग्राम में ऑपरेटिंग सिस्टम के argv [0] का सही मान प्राप्त करना चाहता हूं। पायथन का sys.argv [0] यह मान नहीं है: यह पाइथन लिपि का नाम निष्पादित किया जा रहा है (कुछ अपवादों के साथ)। क्या मैं चाहता हूँ एक foo.py कि "somestring" प्रिंट होगा जबपाइथन में आप ओएस के argv [0] (sys.argv [0] नहीं) कैसे प्राप्त कर सकते हैं?

तुच्छ कार्यक्रम

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

के रूप में मार डाला "foo.py" के बजाय प्रिंट होगा है।

क्या कोई यह जानता है कि इसे कैसे प्राप्त किया जाए? पायथन सी एपीआई में कुछ संबंधित कार्य हैं: उदा। Py_GetProgramName। लेकिन ऐसा लगता है कि यह कहीं भी पाइथन दुनिया से अवगत नहीं है। Py_GetProgramFullPath argv [0] से काम करता है लेकिन मुंग्स इसे पाइथन दुभाषिया के लिए पथ प्राप्त करने का प्रयास करता है। (यह मान sys.executable के लिए प्रचारित है, ताकि चर या तो सही न हो।) क्या मुझे यह मान प्राप्त करने के लिए वास्तव में एक सी मॉड्यूल लिखना है?

संपादित करें: भी पूछा है (लेकिन काम आते हुए उत्तर नहीं) here

उत्तर

7

लिनक्स पर आप /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 कार्यकारी आदेश में एक बग होने के लिए वहाँ लगता है खोल समापन की जगह दुभाषिया बाहर निकलने के बाद टर्मिनल सत्र। यह पहला बैश है।

+0

यह एक बश बग नहीं है, 'exec' कमांड किसी अन्य प्रोग्राम के साथ खोल को प्रतिस्थापित करता है। – interjay

+0

ओह, कुटिल। अगर मुझे पोर्टेबिलिटी के मुद्दे थे तो मुझे आश्चर्य नहीं होगा लेकिन यह मेरे लिए अच्छा है। – pkgw

+0

@interjay मैं देखता हूँ, धन्यवाद! – vz0

संबंधित मुद्दे