পাইথন স্ক্রিপ্টে আমি কীভাবে একটি কমান্ড লাইন কমান্ড চালাব?


16

আমি 2 পৃথক স্ক্রিপ্ট ব্যবহার করছি, Scale1.pyএবং Scale2.py। এগুলো চালানোর জন্য আমি লিখতে sudo python Scale1.pyবা sudo python Scale2.pyটার্মিনাল কম্যান্ড লাইন থেকে। আমি Scale2.pyস্ক্রিপ্টে একটি লাইন রাখতে চাই যাতে আমি একটি বোতাম টিপলে, প্রোগ্রামটি ব্রেক হয়ে চলে Scale1.py। এরকম কিছু, যা কাজ করে না।

if GPIO.input(23) == False:
    break(sudo python Scale1.py)

উত্তর:


24

os.system("sudo python scale1.py")

প্রথমে আপনাকে ওএস মডিউলটি আমদানি করতে হবে

import os

এটিএমের সাথে পরীক্ষার জন্য আমার কাছে পাই নেই, তবে এটি এই প্রশ্নের দ্বিতীয় উত্তর থেকে এসেছে: /programming/89228/calling-an-extern-command-in-python


এটিই আমি চেষ্টা করেছি এবং এটি কাজ করেছে, অনেক ধন্যবাদ হ্যারি! তবে আমি প্রথমে উভয় প্রোগ্রাম একত্রিত করতে হবে। এখন ওএস.সিস্টেম ("sudo পাইথন Scale3.py") Scale3.py প্রোগ্রামের শুরুতে কেবল পুনরায় শুরু হয়, যা ভাল। আমি মনে করি Scale3.py আমদানিও কাজ করবে। আমি সাবপ্রসেস চেষ্টা করিনি, এটি আকর্ষণীয় দেখায় এবং সম্ভবত এটি আমার শেখার দরকার।
রিকো

os.system()পক্ষে অনুমোদিত হয়নি হয়েছে subprocessদেখতে stackoverflow.com/a/4256153/4212158
crypdick

12

সাধারণভাবে, সাবপ্রসেস মডিউলটি ব্যবহার করুন

subprocess.call(["sudo","python","scale1.py"]) 

কমান্ড লাইন কল জন্য।

সাব-প্রসেস কলের ফলাফল প্রক্রিয়া করার একটি উদাহরণ;

 result = subprocess.check_output(['sudo','service','mpd','restart'])

সাবপ্রসেসগুলি বেশ কয়েকটি পুরানো মডিউল এবং ফাংশনগুলি প্রতিস্থাপন করে ওএস.সিস্টেম এবং ওএসস্প্যানের প্রতিস্থাপন করে । এটি যুক্তি সংক্ষিপ্তকরণে ভাল কাজ করে তাই এটি আপনাকে শেল ইঞ্জেকশন থেকে রক্ষা করে ।

https://docs.python.org/2/library/subprocess.html

অবশ্যই দ্বিতীয় অজগর স্ক্রিপ্টটি চালানোর জন্য সি এল এল কল করার দরকার নেই, আপনি সেগুলি আমদানি করতে পারেন।


আমি পাইথন স্ক্রিপ্টের মধ্যে কীভাবে কমান্ড জারি করতে হবে তা শিখতে চেষ্টা করছি ( এখানে এবং এখানে দেখুন ) এবং কিছু সমস্যা আছে। আমি ভাবছি subprocessআমার ক্ষেত্রে আরও ভাল হতে পারে যদি ।
আহহ

6

আপনি sudo হ্যারি sib প্রস্তাবিত হিসাবে ব্যবহার করতে পারেন, কিন্তু আপনি প্রথম স্ক্রিপ্ট চলমান ব্যবহারকারী যোগ করতে হবে sudoers ফাইল হবে

অন্য পাইথন স্ক্রিপ্ট থেকে পাইথন স্ক্রিপ্ট চালানোর সর্বোত্তম উপায় হ'ল এটি আমদানি করা। দ্বিতীয় স্ক্রিপ্টের কোনও পদ্ধতিতে আপনার স্ক্রিপ্টটির যুক্তি থাকা উচিত:

# Scale2.py
ডিফ রান ():
    do_first ()
    do_second ()
    [...]

# কমান্ড লাইন থেকে ডাকা হলেই এটি চালান
যদি __ নাম__ == '__ মেইন__':
    চালানো ()
# স্কেল 1.পি
স্কেল 2 আমদানি করুন

যদি (GPIO.input (23) == মিথ্যা):
    Scale2.run ()

2
+1, যেহেতু অজগর এটি সক্ষম, এটির cleanestউত্তর হবে।
LuWi

1
+1, এটি ওপি যা চায় তা করার সঠিক উপায় এবং সম্ভবত এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.