পাইথন স্ক্রিপ্ট টার্মিনালে কমান্ড কার্যকর করে


109

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

উদাহরণস্বরূপ: স্ক্রিপ্টটি হ'ল:

command 'ls -l'

এটি টার্মিনালে সেই কমান্ডটি চালানোর ফলাফলটি প্রকাশ করবে

উত্তর:


198

এই কাজ করার বিভিন্ন উপায় আছে:

একটি সহজ উপায় ওএস মডিউলটি ব্যবহার করছে:

import os
os.system("ls -l")

সাব-প্রসেস মডিউল দিয়ে আরও জটিল জিনিসগুলি অর্জন করা যায়: উদাহরণস্বরূপ:

import subprocess
test = subprocess.Popen(["ping","-W","2","-c", "1", "192.168.1.70"], stdout=subprocess.PIPE)
output = test.communicate()[0]

43
আমি আপনাকে হ্রাস করতে চাই না কিন্তু। আপনার প্রতিটি কিছুর জন্য সাবপ্রসেস ব্যবহার করা উচিত। এটা উপায় নিরাপদ। subprocess.call () সাধারণ কল ফর্মটি প্রতিস্থাপনের জন্য আপনাকে একটি দুর্দান্ত ইন্টারফেস দেবে।
জোর্হে ভার্গাস

উত্তর সাথির জন্য ধন্যবাদ। উবুন্টু ডেস্কটপে আমার প্রথম অ্যাপ্লিকেশনটির জন্য অজগর ব্যবহার করবে, এটি সত্যিই আমাকে সাহায্য করবে।
লিনাক্সবিল

1
আমি কীভাবে কোনও আদেশের সম্পূর্ণ প্রতিক্রিয়া পেতে পারি, os.system("nslookup gmail.com")কেবলমাত্র শেষ লাইনটি ফেরত দেয় 0তবে আমি সম্পূর্ণ প্রতিক্রিয়া পেতে চাই।
পার্থপ্রতিম নিওগ

3
@ জোর্জে ভার্গাস আপনি কি আমাকে বুঝতে সাহায্য করতে পারেন যে সবকিছুর জন্য কেন সাবপ্রসেস ব্যবহার করা উচিত? এটি নিরাপদ কেন?
সাউতজাইকভিচ

38

আমি সাবপ্রসেস মডিউল ব্যবহার পছন্দ করি:

from subprocess import call
call(["ls", "-l"])

কারণ হ'ল আপনি যদি স্ক্রিপ্টে কিছু পরিবর্তনশীল পাস করতে চান তবে এটি খুব সহজ উপায় দেয় উদাহরণের নীচের অংশটি গ্রহণ করুন

abc = a.c
call(["vim", abc])

অতিরিক্ত পরামিতি সহ একটি ছবি খোলার জন্য আমার পক্ষে ভাল কাজ করেছেcall(["eog", "1breeproposal.png", "-f"])
জোশ


4

আপনার কমান্ডগুলিও দেখতে হবে at গেস্ট্যাটাস আউটপুট

এটি দৈর্ঘ্যের 2 দ্বিগুণ করে দেয় .. প্রথমটি হল রিটার্ন পূর্ণসংখ্যা (0 - কমান্ডগুলি সফল হলে) দ্বিতীয়টি পুরো আউটপুট যেমন টার্মিনালে প্রদর্শিত হবে।

এলএসের জন্য

    import commands
    s=commands.getstatusoutput('ls')
    print s
    >> (0, 'file_1\nfile_2\nfile_3')
    s[1].split("\n")
    >> ['file_1', 'file_2', 'file_3']

2
import os
os.system("echo 'hello world'")

এই কাজ করা উচিত. পাইথন শেলের মধ্যে কীভাবে আউটপুট প্রিন্ট করতে হয় তা আমি জানি না।


1

Os.popen () চমত্কার সহজভাবে ব্যবহার, কিন্তু এটা পাইথন 2.6 থেকে অবচিত হয়েছে। পরিবর্তে আপনার সাবপ্রসেস মডিউলটি ব্যবহার করা উচিত ।

এখানে পড়ুন: একটি স্ট্রিংয়ে একটি os.popen (কমান্ড) পড়া


1

Jupyter

একটি জ্যুপির নোটবুকে আপনি যাদু ফাংশনটি ব্যবহার করতে পারেন !

!echo "execute a command"
files = !ls -a /data/dir/ #get the output into a variable

ipython

এটি একটি .pyস্ক্রিপ্ট হিসাবে চালিত করতে আপনার ব্যবহার করতে হবেipython

files = get_ipython().getoutput('ls -a /data/dir/')

স্ক্রিপ্ট চালানো

$ ipython my_script.py

0

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

import os
os.system('#DesiredAction')

0

পাইথন 3 এর জন্য সাবপ্রসেস ব্যবহার করুন

import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.