2012-02-29 6 views
7

मैं अजगर से gphoto2 चलाने की कोशिश कर रहा हूं लेकिन बिना किसी सफलता के। यह सिर्फ कमांड नहीं मिला है। gphoto सही ढंग से स्थापित है, जैसा कि कमांड टर्मिनल में ठीक काम करता है।पायथन उपप्रोसेस कॉल रिटर्न "कमांड नहीं मिला", टर्मिनल सही ढंग से निष्पादित करता है

p = subprocess.Popen(['gphoto2'], shell=True, stdout=subprocess.PIPE, 
    stderr=subprocess.STDOUT, executable='/bin/bash') 

for line in p.stdout.readlines(): 
    print line 
p.wait() 

/bin/bash: gphoto2: command not found 

मैं जानता हूँ कि OSX टर्मिनल (एप्लिकेशन) लेकिन, इस बारे में कुछ अजीब OSX पर मेरी जानकारी के अल्प है नहीं है।

इस पर कोई विचार?

संपादित

बदल मेरी कोड के कुछ, अन्य त्रुटियों दिखाई

p = subprocess.Popen(['gphoto2'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
for line in p.stdout: 
    print line 


    raise child_exception 
OSError: [Errno 2] No such file or directory 

संपादित

पूरा पथ '/ opt/स्थानीय/bin/gphoto2'

लेकिन अगर कोई इस्तेमाल कर रहा यह समझाने की देखभाल कि किस शैल का उपयोग करना है या कैसे लॉग इन करना है और समान कार्यक्षमता प्राप्त करने में सक्षम होना चाहिए ..?

p = subprocess.Popen('gphoto2', shell=True, ...) 

हालांकि, shell = True का उपयोग कर यदि संभव हो तो, क्योंकि यह एक security risk (चेतावनी देखें) हो सकता है बचा जाना चाहिए:

+1

क्यों आप 'subprocess.check_output का उपयोग नहीं करते() 'या एक समय में पूरी चीज आउटपुट? – Gandaro

उत्तर

7

जब shell = True का उपयोग कर, subprocess.Popen को पहले तर्क एक स्ट्रिंग, नहीं एक सूची होना चाहिए।

बजाय का उपयोग

p = subprocess.Popen(['gphoto2'], ...) 

(जब shell = False, या यदि shell पैरामीटर छोड़ दिया जाता है, पहला तर्क एक सूची होना चाहिए।)

+0

धन्यवाद, मेरे कोड को सही ढंग से पता चला है। हालांकि यह मुझे और नहीं लाया। मैंने अपनी पोस्ट – Aduen

+3

संपादित की है यदि आप 'gphoto2' के लिए पूर्ण पथ का उपयोग करते हैं तो क्या होता है? – unutbu

+0

इसे खोजने का प्रयास कर रहा है, लेकिन जैसा कि कहा गया है, ओएसएक्स मेरा दोस्त नहीं है ... – Aduen

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