2012-12-09 13 views
13

मुझे मॉड्यूल पर कुछ प्रश्न मिल गए हैं लेकिन अधिक आम समस्या को तर्क सूची मिल रही है, जो मुझे लगता है कि मैंने प्रबंधित किया है (अंततः)पायथन subprocess.call() "ऐसी कोई फ़ाइल या निर्देशिका नहीं"

मैं एक प्रोग्राम है जो आदेश पंक्ति में इस तरह एक इनपुट की उम्मीद को चलाने के लिए कोशिश कर रहा हूँ,

fits2ndf in out 
साथ 'में'

फ़ाइल के filepath जा रहा है परिवर्तित करने के लिए किया जा और 'बाहर' करने के लिए पथ और फ़ाइल नाम किया जा रहा है परिणाम को बचाओ।

तो उपप्रक्रिया का उपयोग कर,

subprocess.call(["fits2ndf","/media/tom_hdd/Transfer/reference.fits","/media/tom_hdd/Transfer/reference.sdf"]) 

इस जन्म देती है,

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/lib/python2.7/subprocess.py", line 493, in call 
return Popen(*popenargs, **kwargs).wait() 
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
errread, errwrite) 
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
raise child_exception 
OSError: [Errno 2] No such file or directory 

स्थापना shell=TRUE (मैं जानता हूँ कि जो बुरा है) एक ही परिणाम पैदा करता है। सुनिश्चित नहीं है कि यह प्रासंगिक है लेकिन मैं tcsh का उपयोग कर रहा हूँ। कोई सुझाव? सवालों के जवाब में


संपादित

मैं स्थायी रूप से पथ सेट नहीं किया है लेकिन fits2ndf जो मैं

% tcsh 
% setenv STARLINK_DIR /home/tomq/star-kapuahi 
% source $STARLINK_DIR/etc/login 
% source $STARLINK_DIR/etc/cshrc 

का उपयोग कर प्रारंभ कार्यक्रमों की एक पैकेज का हिस्सा है और सामान्य रूप से किसी भी भीतर से काम करता है पूर्ण पथ निर्दिष्ट किए बिना निर्देशिका।

+0

अपने रास्ते में 'fits2ndf' है? –

+0

क्षमा करें, मैं आपके प्रश्न को काफी समझ नहीं पा रहा हूं, fits2ndf किसी अन्य निर्देशिका में निहित है लेकिन पूर्ण पथ के बिना कहीं और ठीक चला गया है, लेकिन यह .fit फ़ाइल के पथ का हिस्सा नहीं होना चाहिए। – user1889259

+1

@ कार्तिक आपके पाथ पर्यावरण चर का जिक्र कर रहा था। क्या निर्देशिका है जिसमें आपके $ PATH में 'fits2ndf' है, और पाथ निर्यात किया गया है? – cdarke

उत्तर

9

which fits2ndf आपको fits2ndf का मार्ग दिखाएगा।

इसके बाद आप अपने कोड को पूरा पथ लिख सकते हैं और इसे काम करना चाहिए।

पूर्व:

~$ which mv 
/bin/mv 

मेरे अजगर कोड:

import subprocess 

subprocess.call(["/bin/mv","/tmp/a","/tmp/b"]) 
+3

धन्यवाद यह काम करता है, इसे प्राप्त करने से दूर है इसलिए मुझे हर बार fits2ndf के लिए पूरा पथ निर्दिष्ट करने की आवश्यकता नहीं है?वास्तव में आदर्श है कि मैं पथ के बिना उस फ़ोल्डर के भीतर किसी भी प्रोग्राम का उपयोग कर सकता हूं? यह चीजें बहुत गन्दा बनाता है। – user1889259

+1

http://www.troubleshooters.com/linux/prepostpath.htm – denizeren

0

आप भी " /media/tom_hdd/Transfer/reference.sdf"

में अंतरिक्ष को दूर करने, tp एक स्ट्रिंग में सब कुछ डाल कोशिश, "fits2ndf /media/tom_hdd/Transfer/reference.fits /media/tom_hdd/Transfer/reference.sdf"

की तरह आप सटीक दिशा को इंगित सुनिश्चित करें चाहते हो सकता है।

+0

अच्छी जगह, धन्यवाद। दुर्भाग्य से यह केवल तब दिखाई दिया जब इस प्रश्न को लिखना और कोड में नहीं, इसलिए उसने कुछ भी नहीं बदला है। – user1889259

+0

मेरा जवाब संपादित किया गया। – Lotzki