2010-03-18 15 views
9

मुझे इस स्क्रिप्ट को मेरी पायथन लिपि से निष्पादित करने की आवश्यकता है।पायथन स्क्रिप्ट से निष्पादन योग्य को कॉल कैसे करें?

क्या यह संभव है? लिपि कुछ फाइलें लिखी जा रही कुछ फाइलें उत्पन्न करती हैं। मैं इन फ़ाइलों को कैसे एक्सेस करूं? मैंने subprocess कॉल फ़ंक्शन के साथ प्रयास किया है लेकिन सफलता के बिना।

[email protected]:~/Documents/projects/foo$ bin/bar -c somefile.xml -d text.txt -r aString -f anotherString >output 

आवेदन "बार" भी कुछ पुस्तकालयों के लिए संदर्भ है, यह भी उत्पादन के अलावा फ़ाइल "bar.xml" पैदा करते हैं। मैं इन फ़ाइलों तक पहुंच कैसे प्राप्त करूं? खुले() का उपयोग करके बस?

धन्यवाद,

संपादित करें:

अजगर क्रम से त्रुटि केवल इस लाइन है।

$ python foo.py 
bin/bar: bin/bar: cannot execute binary file 
+1

उपप्रोसेसर जो आपको उपयोग करने की आवश्यकता है, क्या आप एक उदाहरण प्रदान कर सकते हैं ताकि हमारे पास एक बेहतर विचार हो कि यह क्यों काम नहीं करता? –

+0

"सबप्रोसेस कॉल"? वो क्या है? कृपया आपके द्वारा उपयोग किए गए कोड और वास्तव में जो त्रुटि मिली है उसे पोस्ट करें। –

+0

हां, वह मानक "सबप्रोसेस" मॉड्यूल में "कॉल" फ़ंक्शन के बारे में बात कर रहा है, जो ऐसा करने का बेहतर तरीका है, हालांकि ओएससिस्टम अपनी आवश्यकताओं के आधार पर पर्याप्त हो सकता है –

उत्तर

23

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

import subprocess 
args = ("bin/bar", "-c", "somefile.xml", "-d", "text.txt", "-r", "aString", "-f", "anotherString") 
#Or just: 
#args = "bin/bar -c somefile.xml -d text.txt -r aString -f anotherString".split() 
popen = subprocess.Popen(args, stdout=subprocess.PIPE) 
popen.wait() 
output = popen.stdout.read() 
print output 

और हाँ, यह सोचते हैं अपने bin/bar कार्यक्रम डिस्क के लिए कुछ अन्य मिश्रित फ़ाइलों लिखा है, आप open("path/to/output/file.txt") के साथ सामान्य रूप में उन्हें खोल सकते हैं। ध्यान दें कि आउटपुट को "आउटपुट" नामक डिस्क पर फ़ाइल पर आउटपुट को रीडायरेक्ट करने के लिए आपको उपशीर्षक पर भरोसा करने की आवश्यकता नहीं है, यदि आप नहीं चाहते हैं। मैं यहां दिखा रहा हूं कि डिस्क के बिना डिस्क पर जाकर सीधे अपने पायथन प्रोग्राम में आउटपुट कैसे पढ़ा जाए।

+0

हाय पीटर, त्रुटि है: बिन/बार: बिन/बार: पाइथन रनटाइम से बाइनरी फ़ाइल निष्पादित नहीं कर सकता है और बिना किसी अन्य जानकारी के। कारण क्या है? –

+0

यह निष्पादन योग्य त्रुटि के बारे में है। मैंने इसे हल किया है, धन्यवाद पीटर। –

11

सबसे आसान तरीका है:

import os 
cmd = 'bin/bar --option --otheroption' 
os.system(cmd) # returns the exit status 

आप हमेशा की तरह फ़ाइलों तक पहुँचने, open() का उपयोग करके।

यदि आपको अधिक जटिल उपप्रोसेस प्रबंधन करने की आवश्यकता है तो subprocess मॉड्यूल जाने का तरीका है।

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