কীভাবে পাইথন ইন্টারপ্রেটারের মধ্যে একটি ফাইল চালানো যায়?


289

আমি দোভাষীর মধ্যে থেকে পাইথন কমান্ড সহ একটি ফাইল কার্যকর করার চেষ্টা করছি।

সম্পাদনা: আমি সেই ফাইল থেকে ভেরিয়েবল এবং সেটিংস ব্যবহার করার চেষ্টা করছি, পৃথক প্রক্রিয়া শুরু করার জন্য নয়।


2
ওএস মডিউল, এবং আমি অন্যান্য উত্তরগুলি যাচাই করছি।
আদম মতান

2
প্রস্তাবিত ওএস.সিস্টেম; এবং আমি সম্পাদনাটি পড়ে উত্তর মুছে ফেললাম: - /
লাইটং

উত্তর:


229

অনেক পথ.

খোল থেকে

python someFile.py

আইডিএল এর ভিতরে থেকে, এফ 5 টিপুন ।

যদি আপনি ইন্টারেক্টিভভাবে টাইপ করে থাকেন তবে এটি ব্যবহার করে দেখুন: ( কেবলমাত্র পাইথন 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
এক্সিকিফাইল আর পাইথন 3 তে বিদ্যমান নেই এবং এক্সিকিউটিভ () মনে হয় কোনওভাবে কাজ করছে না ... আমি কী ভুল করছি তা নিশ্চিত নয়। আপনি উত্তর আপডেট করতে পারেন?
অস্থায়ী_ ব্যবহারকারী_নাম

এর সাথে এক্সিকিউটিং স্ক্রিপ্ট stdinব্যবহার <করার মতো কোনও ফাইল সরবরাহ করার কোনও উপায় আছে execfile()? @ এস-
লট

9
@pzkpfw পাইথন পাইথনের যে কোনও সংস্করণকে নির্দেশ করতে পারে। আমি কেবল পাইথন ভি 3 সহ পরিবেশগুলি দেখেছি যেখানে pythonপয়েন্ট রয়েছে python3
স্টকবি

2
@pzkpfw pythonএটি পরিবেশের ভেরিয়েবলের ফোল্ডারগুলির সন্ধান করার সময় সিস্টেমটি কার্যকর করতে সক্ষম ফলাফলের উপর নির্ভর করে PATH
হ্যালোগডবাই

254

পাইথন 2 এর জন্য:

>>> execfile('filename.py')

পাইথন 3 এর জন্য:

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

ডকুমেন্টেশন দেখুন । আপনি যদি পাইথন 3.0 ব্যবহার করেন তবে এই প্রশ্নটি দেখুন

এটি কার্যকর করার পরে আপনি ফাইলনাম.পি থেকে গ্লোবালগুলিতে কীভাবে অ্যাক্সেস করেন তার উদাহরণের জন্য @ এস.লোটের উত্তর দেখুন।


পড়ার পদ্ধতি কী করে? দুর্ভাগ্যক্রমে অফিসিয়াল ডকুমেন্টেশন সাইটটি একটি পরিষ্কার উদাহরণ এবং ব্যাখ্যা সরবরাহ করে না।
দিমিত্রি

এটি ফাইলটি পড়ে এবং একক স্ট্রিংয়ে পুরো বিষয়বস্তু ফেরত দেয় (ডিফল্টরূপে), ফাইলটি খোলার জন্য ডাব্লু 3 স্কুলগুলির পৃষ্ঠা দেখুন ।
সর্বাধিক

খোলা () এর জন্য ডক্স এখানে রয়েছে: docs.python.org/3/library/io.html
কোডপ

96

পাইথন 2 + পাইথন 3

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

এটি একটি স্ক্রিপ্ট কার্যকর করবে এবং দোভাষীর গ্লোবাল স্কোপে (বেশিরভাগ স্ক্রিপ্টিং পরিবেশে স্বাভাবিক আচরণ) এটির সমস্ত বৈশ্বিক পরিবর্তনশীল রাখবে।

পাইথন 3 execডকুমেন্টেশন


1
আপনি আমার নায়ক! আমি কয়েকদিন ধরে সত্যিই কিছু অদ্ভুত জিনিসগুলির সাথে লড়াই করছি যেখানে os.getcwd () একটি কথা বলেছিল, তবে গ্লোব ("*") অন্য ডিরেক্টরিতে কাজ করেছে ... আপনাকে ধন্যবাদ! ধন্যবাদ!
প্যালভিলেনসেন

স্ক্রিপ্টে কোনও প্যারামিটার দেওয়ার কোনও উপায় আছে কি? নিম্নলিখিতগুলি কাজ করে না: এক্সিকিউটিউট ("setup.py ইনস্টল খুলুন") পড়ুন (), গ্লোবাল ())
বেন

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(মাইনাস। পিপি, একই ডিরেক্টরিতে বা আপনার থাকা দরকার 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

আমি বিশেষজ্ঞ নই তবে আমি এটি লক্ষ্য করেছি:

উদাহরণস্বরূপ যদি আপনার কোডটি মাইকোড.পি হয় এবং আপনি কেবল 'ইম্পোর্ট মাইকোড' টাইপ করেন, পাইথন এটি কার্যকর করে তবে এটি আপনার সমস্ত ভেরিয়েবল দোভাষীর কাছে উপলব্ধ করবে না। আমি খুঁজে পেয়েছি যে আপনি যদি ডায়ালটারের কাছে সমস্ত ভেরিয়েবলগুলি উপলভ্য করতে চান তবে 'মাইকোড আমদানি থেকে' আপনার টাইপ করা উচিত।


3
এছাড়াও, এটি একটি মন্তব্য হওয়া উচিত, উত্তর নয়।
আদম মতান

9

শুধু কর,

from my_file import *

.Py এক্সটেনশন যোগ না করার বিষয়টি নিশ্চিত করুন। যদি আপনার .py ফাইলটি উপ-ডিরেক্টরিতে ব্যবহৃত হয়,

from my_dir.my_file import *

এটি আমার কাছে সবচেয়ে মার্জিত বলে মনে হচ্ছে।
ম্যাসিমিলিয়ানো ক্রাউস 21

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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.