2010-08-01 13 views
5

मैं os.execv का उपयोग कर एक नई प्रक्रिया के साथ वर्तमान प्रक्रिया को प्रतिस्थापित करना चाहता हूं, यह तब तक ठीक काम करता है जब तक आपके पास कोई तर्क न हो।os.execv बिना तर्क तर्क

अगर मैं उस प्रक्रिया को पारित करने के लिए कोई तर्क नहीं लेता हूं, तो भी मैं इसे कैसे कॉल कर सकता हूं?

# Works fine, unless the arguments tuple wouldn't exist or be empty 
os.execv('process.exe', ('arg1', 'arg2')) 

उत्तर

6

ठीक है, आईआरसी पर पूछ के बाद वे ने बताया क्यों यह इस तरह से काम करता है की कोशिश करो।

पहला तर्क (arg0) आमतौर पर आप जो निष्पादित कर रहे हैं उसका फ़ाइल नाम (sys.argv [0] उदाहरण के लिए) है, इसलिए पहला तर्क हमेशा फ़ाइल नाम होना चाहिए।

यह बताता है कि क्यों तर्क वैकल्पिक नहीं हैं, आईआरसी पर उन्होंने कहा कि arg0 यह है कि ऐप का नाम क्या होगा।

1

यह मेरे लिए काम करता

os.execv('process',()) 

आप तर्क के बिना सुनिश्चित करें कि आपके process काम कर रहे हैं?

या execl

os.execl('process') 
+0

वह एक त्रुटि है कि टपल मेरे लिए रिक्त है (अजगर 2.7 में) दे देंगे, और हाँ मैं जानता हूँ कि यह तर्क के बिना काम करता है, यह है: तो यह उन में से एक का उपयोग करने के लिए बेहतर है एक py2exe पैकेज। –

+0

मैं 2.5 का उपयोग कर रहा हूं ताकि यह समस्या हो। क्या आपने execl() के साथ कोशिश की है? –

+0

लगता है कि execl दृश्यों के पीछे execv का उपयोग करता है: http://pastebin.com/W1YKpxe7 –

5

इन तीन वेरिएंट समस्या को हल कर सकते हैं:

cmd = '/usr/bin/vi' 
os.execv(cmd, ('',)) 
os.execv(cmd, ['']) 
os.execl(cmd, '') 

आम तौर पर एक तर्क सूची (sys.argv) के पहले पैरामीटर आदेश जो आवेदन आह्वान करने के लिए इस्तेमाल किया गया था है।

cmd = '/usr/bin/vi' 
os.execv(cmd, (cmd,)) 
os.execv(cmd, [cmd]) 
os.execl(cmd, cmd) 

os.exec* documentation on python.org

+1

यह एक सही उत्तर है, इंडेक्स 0 पर तर्क कार्यक्रम का नाम है –

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