पायथन स्क्रिप्ट टर्मिनल में कमांड निष्पादित करती है


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 () आपको एक अच्छा इंटरफ़ेस मिलेगा।
जॉर्ज वर्गास

उस उत्तर साथी के लिए धन्यवाद। उबंटू डेस्कटॉप पर मेरे पहले आवेदन के लिए अजगर का उपयोग किया जाएगा, यह वास्तव में मेरी मदद करेगा।
LinuxBill

1
मैं एक कमांड की पूरी प्रतिक्रिया कैसे प्राप्त कर सकता हूं, os.system("nslookup gmail.com")केवल अंतिम पंक्ति लौटाता 0हूं, लेकिन मैं पूरी प्रतिक्रिया प्राप्त करना चाहता हूं।
पार्थप्रतिमा नेओग

3
@JorgeVargas क्या आप मुझे यह समझने में मदद कर सकते हैं कि सब कुछ के लिए उपप्रकार का उपयोग क्यों किया जाना चाहिए? क्यों सुरक्षित है?
साउथइकाइविच

38

मैं सबप्रोसेस मॉड्यूल के उपयोग को प्राथमिकता देता हूं:

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

कारण यह है कि यदि आप स्क्रिप्ट में कुछ चर पास करना चाहते हैं, तो यह कोड के निम्नलिखित भाग को उदाहरण के लिए बहुत आसान तरीका देता है

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

अतिरिक्त मापदंडों के साथ एक तस्वीर खोलने के लिए मेरे लिए अच्छी तरह से काम कियाcall(["eog", "1breeproposal.png", "-f"])
जोश


4

आपको कमांड्स .getstatusoutput में भी देखना चाहिए

यह लंबाई 2 का एक टपल देता है। पहला रिटर्न पूर्णांक है (0 - जब कमांड सफल होता है) दूसरा संपूर्ण आउटपुट है जैसा कि टर्मिनल में दिखाया जाएगा।

Ls के लिए

    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

आप 'os' मॉड्यूल आयात कर सकते हैं और इसे इस तरह उपयोग कर सकते हैं:

import os
os.system('#DesiredAction')

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.