উত্তর:
সঙ্গে -c
(কমান্ড) যুক্তি (অভিমানী আপনার ফাইল নামকরণ করা হয় foo.py
):
$ python -c 'import foo; print foo.hello()'
বিকল্পভাবে, আপনি যদি নেমস্পেস দূষণ সম্পর্কে চিন্তা না করেন:
$ python -c 'from foo import *; print hello()'
এবং মাঝের স্থল:
$ python -c 'from foo import hello; print hello()'
$python -c "import foo;foo.hello()"
print foo.hello()
করার সময় print(foo.hello())
। কেন এটি হচ্ছে তা ব্যাখ্যা করার জন্য আমার কাছে অজগর সম্পর্কিত জ্ঞান নেই, সুতরাং যদি কেউ অন্য কী ঘটছে তা ব্যাখ্যা করতে পারে, তবে এটির প্রশংসা হবে
কেবল hello()
ফাংশনটির নীচে কোথাও রেখে দিন এবং এটি কার্যকর করলে এটি কার্যকর হবেpython your_file.py
একটি পরিষ্কার সমাধানের জন্য আপনি এটি ব্যবহার করতে পারেন:
if __name__ == '__main__':
hello()
আপনি যদি ফাইলটি চালনা করেন কেবল তখনই ফাংশনটি কার্যকর করা হবে, আপনি যখন ফাইলটি আমদানি করবেন না।
hello()
কমান্ড লাইন দ্বারা সরবরাহ করা উচিত যে যুক্তি গ্রহণ করে?
sys.argv
সেক্ষেত্রে আপনি পদ্ধতিতে পাঠাতে পারেন । বা হ্যালো পদ্ধতি থেকে এটি অ্যাক্সেস করুন
hello()
) এবং কমান্ড লাইন থেকে এটি চালাবো?
python -c 'from myfile import hello; hello()'
যেখানে myfile
আপনার পাইথন স্ক্রিপ্টের বেসনাম দিয়ে প্রতিস্থাপন করতে হবে। (যেমন, myfile.py
হয়ে যায় myfile
)।
তবে, যদি hello()
আপনার পাইথন স্ক্রিপ্টে আপনার "স্থায়ী" প্রধান এন্ট্রি পয়েন্ট হয়, তবে এটি করার স্বাভাবিক উপায়টি নিম্নরূপ:
def hello():
print "Hi :)"
if __name__ == "__main__":
hello()
এটি আপনাকে কেবল চালানো python myfile.py
বা দ্বারা স্ক্রিপ্টটি সম্পাদন করতে দেয় python -m myfile
।
এখানে কিছু ব্যাখ্যা: __name__
একটি বিশেষ পাইথন পরিবর্তনশীল যে মডিউল নাম বর্তমানে মৃত্যুদন্ড কার্যকর করা হচ্ছে ঝুলিতে ব্যতীত যখন মডিউল কমান্ড লাইন, যে ক্ষেত্রে এটা হয়ে থেকে শুরু হয় "__main__"
।
python -m foo -c 'foo.bar()'
এবং python -c 'import foo; foo.bar()'
? আমি আলাদা আচরণ পেয়েছি যেখানে মনে হয় -C যুক্তি প্রথম ক্ষেত্রে অগ্রাহ্য করা হয়েছে।
আমি একটি দ্রুত ছোট পাইথন স্ক্রিপ্ট লিখেছি যা ব্যাশ কমান্ড লাইন থেকে কলযোগ্য। এটি আপনাকে যে মডিউল, শ্রেণি এবং পদ্ধতিতে কল করতে চান এবং যে পরামিতিগুলি আপনি পাস করতে চান তার নাম নেয়। আমি এটিকে পাইআরুন বলেছি এবং .py এক্সটেনশনটি ছেড়ে দিয়েছি এবং chmod + x পাইরুন দিয়ে এটি সম্পাদনযোগ্য করে তুলেছি যাতে আমি কেবল এটি অনুসরণ করে দ্রুত কল করতে পারি:
./PyRun PyTest.ClassName.Method1 Param1
এটি পাইরুন নামক একটি ফাইলে সংরক্ষণ করুন
#!/usr/bin/env python
#make executable in bash chmod +x PyRun
import sys
import inspect
import importlib
import os
if __name__ == "__main__":
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0]))
if cmd_folder not in sys.path:
sys.path.insert(0, cmd_folder)
# get the second argument from the command line
methodname = sys.argv[1]
# split this into module, class and function name
modulename, classname, funcname = methodname.split(".")
# get pointers to the objects based on the string names
themodule = importlib.import_module(modulename)
theclass = getattr(themodule, classname)
thefunc = getattr(theclass, funcname)
# pass all the parameters from the third until the end of
# what the function needs & ignore the rest
args = inspect.getargspec(thefunc)
z = len(args[0]) + 2
params=sys.argv[2:z]
thefunc(*params)
এটি কীভাবে কাজ করে তা দেখানোর জন্য এখানে একটি নমুনা মডিউল। এটি পাইটেষ্ট.পি নামে একটি ফাইলে সংরক্ষিত হয়েছে:
class SomeClass:
@staticmethod
def First():
print "First"
@staticmethod
def Second(x):
print(x)
# for x1 in x:
# print x1
@staticmethod
def Third(x, y):
print x
print y
class OtherClass:
@staticmethod
def Uno():
print("Uno")
এই উদাহরণগুলি চালনার চেষ্টা করুন:
./PyRun PyTest.SomeClass.First
./PyRun PyTest.SomeClass.Second Hello
./PyRun PyTest.SomeClass.Third Hello World
./PyRun PyTest.OtherClass.Uno
./PyRun PyTest.SomeClass.Second "Hello"
./PyRun PyTest.SomeClass.Second \(Hello, World\)
দ্বিতীয় পদ্ধতির একমাত্র প্যারামিটার হিসাবে টিউপলে পাস করার জন্য প্রথম বন্ধন থেকে বেরিয়ে যাওয়ার শেষ উদাহরণটি লক্ষ্য করুন।
পদ্ধতির যা প্রয়োজন তার জন্য যদি আপনি খুব কম পরামিতিগুলি পাস করেন তবে আপনি একটি ত্রুটি পান। আপনি যদি খুব বেশি পাস করেন তবে এটি অতিরিক্তগুলি উপেক্ষা করে। মডিউলটি অবশ্যই বর্তমান কার্যকারী ফোল্ডারে থাকতে হবে, পাইআরুন আপনার পথে যে কোনও জায়গায় থাকতে পারে put
আপনার স্ক্রিপ্টের নীচে এই স্নিপেট যুক্ত করুন
def myfunction():
...
if __name__ == '__main__':
globals()[sys.argv[1]]()
আপনি এখন চালিয়ে আপনার ফাংশন কল করতে পারেন
python myscript.py myfunction
এটি কাজ করে কারণ আপনি কমান্ড লাইন আর্গুমেন্টটি (ফাংশনটির নামের একটি স্ট্রিং) locals
, বর্তমান স্থানীয় প্রতীক টেবিল সহ একটি অভিধানে পাস করছেন । শেষে প্যারান্থেসিসগুলি ফাংশনটি কল করা হবে।
আপডেট: আপনি যদি কমান্ড লাইন থেকে কোনও পরামিতিটি ফাংশনটি স্বীকার করতে চান তবে আপনি এইভাবে পাস করতে পারেন sys.argv[2]
:
def myfunction(mystring):
print mystring
if __name__ == '__main__':
globals()[sys.argv[1]](sys.argv[2])
এইভাবে, চলমান python myscript.py myfunction "hello"
আউটপুট হবে hello
।
myfunction(12)
আসুন আমরা এটিকে কিছুটা সহজ করি এবং কেবল একটি মডিউল ব্যবহার করি ...
চেষ্টা করুন: pip install compago
তারপর লিখ:
import compago
app = compago.Application()
@app.command
def hello():
print "hi there!"
@app.command
def goodbye():
print "see ya later."
if __name__ == "__main__":
app.run()
তারপরে যেমন ব্যবহার করুন:
$ python test.py hello
hi there!
$ python test.py goodbye
see ya later.
দ্রষ্টব্য: এই মুহূর্তে পাইথন 3 এ একটি বাগ রয়েছে তবে পাইথন 2 দিয়ে দুর্দান্ত কাজ করে।
সম্পাদনা: এর চেয়েও ভাল বিকল্প, আমার মতে গুগলের মডিউল ফায়ার যা ফাংশন আর্গুমেন্টগুলি পাস করাও সহজ করে তোলে। এটি ইনস্টল করা আছে pip install fire
। তাদের গিটহাব থেকে:
এখানে একটি সহজ উদাহরণ।
import fire
class Calculator(object):
"""A simple calculator class."""
def double(self, number):
return 2 * number
if __name__ == '__main__':
fire.Fire(Calculator)
তারপরে, কমান্ড লাইন থেকে, আপনি চালাতে পারেন:
python calculator.py double 10 # 20
python calculator.py double --number=15 # 30
python -m fire file_name method_name
। এটি একটি অন্তর্নির্মিত আরগপারসারও রয়েছে।
আকর্ষণীয়ভাবে যথেষ্ট, যদি লক্ষ্যটি ছিল কমান্ড লাইন কনসোলে মুদ্রণ করা বা অন্য কোনও মিনিট অজগর অপারেশন করা, আপনি পাইথন ইন্টারপ্রেটারের মতো ইনপুটটি পাইপ করতে পারেন:
echo print("hi:)") | python
পাইপ ফাইল হিসাবে ..
python < foo.py
* নোট করুন যে দ্বিতীয়টি কাজ করার জন্য এক্সটেনশনটি .py হওয়া দরকার না। ** এও নোট করুন যে ব্যাশের জন্য আপনাকে অক্ষরগুলি থেকে বাঁচতে হতে পারে
echo print\(\"hi:\)\"\) | python
echo import foo;foo.hello() | python
echo 'print("hi:)")' | python
আপনি যদি রানপ প্যাকেজটি pip install runp
চালানোর বিষয়টি ইনস্টল করেন :
runp myfile.py hello
আপনি সংগ্রহস্থলটি এখানে পেতে পারেন: https://github.com/vascop/runp
আমার কমান্ড লাইনে বিভিন্ন পাইথন ইউটিলিটিস (রেঞ্জ, স্ট্রিং ইত্যাদি) ব্যবহার করার প্রয়োজন ছিল এবং তার জন্য বিশেষভাবে পাইফুঙ্ক টুলটি লিখেছিলাম । কমান্ড লাইন ব্যবহারের অভিজ্ঞতা সমৃদ্ধ করতে আপনি এটি ব্যবহার করতে পারেন:
$ pyfunc -m range -a 1 7 2
1
3
5
$ pyfunc -m string.upper -a test
TEST
$ pyfunc -m string.replace -a 'analyze what' 'what' 'this'
analyze this
কমান্ড পাইথনের সাথে কমান্ড লাইনে অজগর প্রবেশ করা সর্বদা একটি বিকল্প
তারপরে আপনার ফাইলটি আমদানি করুন উদাহরণস্বরূপ আমদানি করুন ile
তারপরে কমান্ডটি example_file.hello () দিয়ে চালান
এটি অদ্ভুত। পিসিপি অনুলিপি ফাংশন এড়িয়ে যায় যা প্রতিবার অজগর-সি ইত্যাদি চালানোর সময় উত্পন্ন হয় crops
একক কমান্ডের মতো সুবিধাজনক নাও হতে পারে, তবে কমান্ড লাইন থেকে কোনও ফাইল পাঠাতে একটি ভাল দ্রুত ফিক্স, এবং আপনাকে আপনার ফাইলটি কল করতে এবং এক্সিকিউট করার জন্য অজগর ব্যবহার করতে দেয়।
এর মতো কিছু: কল_ফ্রম_টার্মিনাল.পি
# call_from_terminal.py
# Ex to run from terminal
# ip='"hi"'
# python -c "import call_from_terminal as cft; cft.test_term_fun(${ip})"
# or
# fun_name='call_from_terminal'
# python -c "import ${fun_name} as cft; cft.test_term_fun(${ip})"
def test_term_fun(ip):
print ip
এটি ব্যাশে কাজ করে।
$ ip='"hi"' ; fun_name='call_from_terminal'
$ python -c "import ${fun_name} as cft; cft.test_term_fun(${ip})"
hi
নীচে Odd_Even_function.py ফাইল যা ফাংশন সংজ্ঞা আছে।
def OE(n):
for a in range(n):
if a % 2 == 0:
print(a)
else:
print(a, "ODD")
এখন নীচের কমান্ড প্রম্পট থেকে একই কল করতে আমার পক্ষে কাজ করা বিকল্পগুলি রয়েছে।
বিকল্পগুলির 1 এক্সের সম্পূর্ণ পথ \ পাইথন.এক্সএইসি -c "আমদানি ওড_ইভেন_ফংশন; ওড_এভেন_ফানশন.ওই (100)"
বিকল্প 2 অপডের সম্পূর্ণ পথ \ পাইথন.এক্সই-সি "ওড_এভেন_ফংশন আমদানি OE; ওই (100)"
ধন্যবাদ।
প্রথমে আপনাকে ফাংশনটি কল করতে হবে যেমন তারা আপনাকে বলেছিল বা ফাউঞ্চ আউটপুটে কিছুই প্রদর্শন করবে না, তারপরে ফাইলটি সংরক্ষণ করুন এবং ফাইলটির ফোল্ডারে ডান ক্লিক করে অনুলিপি করুন এবং "অনুলিপি ফাইল" ক্লিক করুন তারপরে টার্মিনালে যান এবং লিখুন: - সিডি "ফাইলের পথ" - পাইথন "উদাহরণস্বরূপ ফাইলের নাম (main.py)" এর পরে এটি আপনার কোডের আউটপুট প্রদর্শন করবে display
print "Hi :)"
পরিবর্তে বোঝানো হয়েছেreturn 'Hi :)'
।