अजगर दुभाषिया के भीतर एक फ़ाइल को कैसे निष्पादित करें?


289

मैं दुभाषिया के भीतर से अजगर कमांड के साथ एक फ़ाइल निष्पादित करने की कोशिश कर रहा हूं।

संपादित करें: मैं उस फ़ाइल से चर और सेटिंग्स का उपयोग करने की कोशिश कर रहा हूं, न कि एक अलग प्रक्रिया को लागू करने के लिए।


2
ओएस मॉड्यूल, और मैं अन्य उत्तरों की जांच कर रहा हूं।
एडम मटन

2
सुझाया गया os.system; और हटाए गए उत्तर को जब मैंने EDIT पढ़ा: - /
Lightsong

जवाबों:


229

कई तरीके।

खोल से

python someFile.py

IDLE के अंदर से, F5 मारा ।

यदि आप अंतःक्रियात्मक रूप से टाइप कर रहे हैं, तो यह कोशिश करें: ( केवल पायथन 2 !)

>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module

पायथन 3 के लिए , उपयोग करें:

>>> exec(open("filename.py").read())

10
pythonकाम नहीं करता है अगर आप अजगर 3 चला रहे हैं, तो python3इसका उपयोग किया जाता है।
pzkpfw

41
Exyfile अब python3 में मौजूद नहीं है, और निष्पादित () किसी भी तरह से काम नहीं कर रहा है ... यकीन नहीं कि मैं क्या गलत कर रहा हूं। क्या आप जवाब अपडेट कर सकते हैं?
temporary_user_name

वहाँ किसी भी तरह stdinसे एक फ़ाइल से प्रदान <करने के लिए निष्पादित स्क्रिप्ट का उपयोग करने का तरीका है execfile()? @ s-lott
भानु

9
@pzkpfw अजगर अजगर के किसी भी संस्करण को इंगित कर सकते हैं। मैंने केवल python v3 के साथ वातावरण को देखा है, जहां pythonइंगित करता है python3
स्टॉकबी

2
@pzkpfw pythonपर्यावरण चर में फ़ोल्डर्स के माध्यम से देखने पर सिस्टम को जो निष्पादन योग्य लगता है, उस पर निर्भर करता है PATH
HelloGoodbye

254

पायथन 2 के लिए:

>>> execfile('filename.py')

पायथन 3 के लिए:

>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())

दस्तावेज देखें । यदि आप पायथन 3.0 का उपयोग कर रहे हैं, तो इस प्रश्न को देखें ।

इसे निष्पादित करने के बाद आप filename.py से ग्लोबल्स कैसे एक्सेस करते हैं, इसके उदाहरण के लिए @ S.Lott द्वारा उत्तर देखें।


रीड मेथड क्या करता है? दुर्भाग्य से आधिकारिक प्रलेखन साइट एक स्पष्ट उदाहरण और स्पष्टीकरण प्रदान नहीं करता है।
दिमित्री

यह फ़ाइल और रिटर्न (डिफ़ॉल्ट रूप से) एक ही स्ट्रिंग में संपूर्ण सामग्री को पढ़ता है, उदाहरण के लिए फ़ाइल पर w3schools पृष्ठ खोलें
अधिकतम

यहाँ खुले के लिए डॉक्स हैं (): docs.python.org/3/library/io.html
कोडेपी

96

पायथन 2 + पायथन 3

exec(open("./path/to/script.py").read(), globals())

यह एक स्क्रिप्ट निष्पादित करेगा और इंटरप्रिटर के वैश्विक दायरे (अधिकांश स्क्रिप्टिंग वातावरण में सामान्य व्यवहार) में सभी वैश्विक चर डाल देगा।

पायथन 3 execप्रलेखन


1
आप मेरे हीरो हैं! मैं उन दिनों के लिए कुछ बहुत ही अजीब सामान के साथ लड़ रहा हूं जहां os.getcwd () ने एक बात कही, लेकिन ग्लोब ("*") ने एक और निर्देशिका में काम किया ... धन्यवाद! धन्यवाद!
pallevillesen

क्या स्क्रिप्ट के लिए एक पैरामीटर पास करने का कोई तरीका है? निम्नलिखित काम नहीं करता है: निष्पादन ("सेटअप सेटअप खोलें") (पढ़ें) (, ग्लोबल्स ())
बेन

1
@ जो काम नहीं करेगा क्योंकि openसीधे स्क्रिप्ट से कोड पढ़ता है। तर्कों को पारित करने के लिए, इस उत्तर को देखें , लेकिन इसके बजाय execfile, स्पष्ट रूप से उपयोग करें execऔर openजैसा कि ऊपर दिखाया गया है।
निको

47

हैरानी की बात यह है कि मैंने अभी तक इसे नहीं देखा है। आप फ़ाइल का निष्पादन कर सकते हैं और फिर -iविकल्प का उपयोग करके निष्पादन समाप्त होने के बाद दुभाषिया को खुला छोड़ सकते हैं :

| foo.py |
----------
testvar = 10

def bar(bing):
  return bing*3

--------



$ python -i foo.py
>>> testvar 
10
>>> bar(6)
18

30

मैं उस फ़ाइल से चर और सेटिंग्स का उपयोग करने की कोशिश कर रहा हूं, न कि एक अलग प्रक्रिया को लागू करने के लिए।

ठीक है, बस फ़ाइल को import filename(शून्य से .py के साथ, उसी निर्देशिका में या आपके पास होने की आवश्यकता है) फ़ाइल आयात करना PYTHONPATH, filename.variableनाम में उपलब्ध चर, फ़ंक्शंस, कक्षाएं, आदि बनाते हुए फ़ाइल चलाएगा ।

इसलिए यदि आपके पास cheddar.pyचर स्पैम और फ़ंक्शन अंडे हैं - तो आप उन्हें आयात कर सकते हैं import cheddar, चर के साथ एक्सेस कर सकते हैं cheddar.spamऔर कॉल करके फ़ंक्शन चला सकते हैंcheddar.eggs()

यदि आपके पास cheddar.pyएक फ़ंक्शन के बाहर कोड है , तो इसे तुरंत चलाया जाएगा, लेकिन आयात पर सामान चलाने वाले एप्लिकेशन का निर्माण आपके कोड का पुन: उपयोग करने के लिए कठिन बनाने वाला है। यदि संभव हो, तो सब कुछ कार्यों या कक्षाओं के अंदर रखें।


4
वैश्विक नेमस्पेस का उपयोग नहीं करेंगे, क्योंकि प्रश्न की आवश्यकता है। इसके बजाय उपयोग करेंfrom filename import *
रिकार्डो क्रूज़

प्रश्न विशेष रूप से एक वैश्विक नामस्थान का उपयोग करने का उल्लेख नहीं करता है, यह वही हो सकता है जो ओपी चाहता है, लेकिन यह प्रश्न से स्पष्ट नहीं है।
२०:०५ पर ryanpcmcquen

13

मेरे विचार से, सबसे अच्छा तरीका है:

import yourfile

और yourfile.py को संशोधित करने के बाद

reload(yourfile)   

या

import imp; 
imp.reload(yourfile) in python3

लेकिन इससे फंक्शन और क्लासेस कुछ इस तरह दिखेंगे: yourfile.function1, yourfile.class1 .....

यदि आप उन लोगों को स्वीकार नहीं कर सकते हैं, तो अंत में समाधान है:

reload(yourfile)
from yourfile import *

9

मैं एक विशेषज्ञ नहीं हूं, लेकिन यह मैंने देखा है:

यदि आपका कोड उदाहरण के लिए mycode.py है, और आप सिर्फ 'import mycode' टाइप करते हैं, तो Python इसे निष्पादित करेगा लेकिन यह आपके सभी वैरिएबल को दुभाषिया को उपलब्ध नहीं कराएगा। मैंने पाया कि यदि आप इंटरप्रेटर को सभी चर उपलब्ध कराना चाहते हैं तो आपको वास्तव में 'mycode import *' से टाइप करना चाहिए।


3
साथ ही, यह एक टिप्पणी होनी चाहिए, एक जवाब नहीं।
एडम मटन

9

बस करो,

from my_file import *

सुनिश्चित करें कि .py एक्सटेंशन को न जोड़ें। यदि आपकी .py फ़ाइल उपनिर्देशिका उपयोग में है,

from my_dir.my_file import *

यह मुझे सबसे सुंदर लगता है।
मैसिमिलियानो क्रूस

8

के साथ या तो python3 उपयोग के लिए xxxx = nameकी yourfile

exec(open('./xxxx.py').read())

8

पायथन 3 के लिए:

>>> exec(open("helloworld.py").read())

सुनिश्चित करें कि आप कमांड चलाने से पहले सही निर्देशिका में हैं।

किसी भिन्न निर्देशिका से फ़ाइल चलाने के लिए, आप नीचे दिए गए आदेश का उपयोग कर सकते हैं:

with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
    exec(file.read())

1

आप निम्नलिखित सुविधाओं की इच्छा:

  1. स्रोत फ़ाइल आपके डिबगर में ठीक से व्यवहार करती है (स्टैक, आदि में फ़ाइलनाम दिखाता है)
  2. __name__ == '__main__' यह सही है इसलिए स्क्रिप्ट्स स्क्रिप्ट के रूप में ठीक से व्यवहार करती हैं।

exec(open('foo.py').read())सुविधा 1 विफल रहता import fooरणनीति विफल रहता है सुविधा 2

दोनों प्राप्त करने के लिए, आपको इसकी आवश्यकता है:

    source = open(filename).read()
    code = compile(source, filename, 'exec')
    exec(code)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.