2012-12-30 14 views
6

मान लें कि मेरे पास फ़ाइल है foo.py, और फ़ाइल के भीतर मैं एक फ़ाइल निष्पादित करना चाहता हूं bar.py। लेकिन, bar.py उसी निर्देशिका में नहीं है जैसे foo.py, यह उपनिर्देशिका कॉल बाज़ में है। execfile काम करेगा? os.system के बारे में क्या?एक पायथन फ़ाइल कैसे चलाएं किसी अन्य पायथन फ़ाइल से निर्देशिका में नहीं?

उत्तर

4

बस एक खाली __init__.pybaz संकेत करने के लिए फ़ाइल जोड़ने के एक मॉड्यूल है और, foo.py से कार्य करें:

from baz import bar 

, जब तक निश्चित रूप से, आप एक मॉड्यूल में baz बनाने के लिए नहीं है (और execfile का उपयोग एक अच्छा कारण है)।

+0

धन्यवाद, मैं इस अधिकार पर काम कर रहा हूँ अभी व। – user1938464

1

प्रश्न का तात्पर्य है कि आप इन्हें स्क्रिप्ट के रूप में चलाने के लिए चाहते हैं, इसलिए हाँ: आप 2.X या subprocess में निष्पादन का उपयोग कर सकते हैं (दुभाषिया को कॉल करें और स्क्रिप्ट को तर्क के रूप में पास करें)। आपको बस फाइलों को पूर्ण पथ प्रदान करने की आवश्यकता है।

# Python 2.X only! 
execfile ('c:/python/scripts/foo/baz/baz.py') 

यह सचमुच भंगुर है। baz हमेशा foo की एक subirectory है, तो आप foo के फ़ाइल से यह प्राप्त हो सकता है:

baz_dir = os.path.join(os.path.dirname(__file__), "baz") 
baz_file = os.path.join(baz_dir, "baz.py") 
execfile(baz_file) 

दोनों फ़ाइलों स्थान जो आपके अजगर द्वारा देखा जा सकता है तो - यानी, फ़ोल्डरों sys.path में हैं या कर दिया गया है site का उपयोग करके खोज पथ में जोड़ा गया है, आप foo से baz आयात कर सकते हैं और इसके कार्यों को सीधे कॉल कर सकते हैं। यदि आपको वास्तव में किसी कार्रवाई को ट्रिगर करने की बजाए बाज़ से जानकारी पर कार्य करने की आवश्यकता है, तो यह जाने का एक बेहतर तरीका है। As long as there is an init.py in each folder तुम सिर्फ रन टाइम के दौरान पथ जोड़कर

import baz 
baz.do_a_function_defined_in_baz() 
2

आयात sys परिवर्तन "sys.path" कर सकता है, तो मॉड्यूल में मदद मिलेगी आयात

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