Python Script führt Befehle im Terminal aus


109

Ich habe das vor einiger Zeit irgendwo gelesen, kann es aber nicht finden. Ich versuche, einen Befehl zu finden, der Befehle im Terminal ausführt und dann das Ergebnis ausgibt.

Zum Beispiel: Das Skript lautet:

command 'ls -l'

Das Ergebnis der Ausführung dieses Befehls im Terminal wird ausgegeben

Antworten:


197

Es gibt verschiedene Möglichkeiten, dies zu tun:

Ein einfacher Weg ist die Verwendung des OS-Moduls:

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

Mit dem Unterprozessmodul können komplexere Dinge erreicht werden: zum Beispiel:

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

43
Ich will dich aber nicht ablehnen. Sie sollten für alles einen Unterprozess verwenden. Es ist viel sicherer. Mit subprocess.call () erhalten Sie eine schöne Oberfläche, um das einfache Aufrufformular zu ersetzen.
Jorge Vargas

Danke für diese Antwort Kumpel. Ich werde Python für meine erste Anwendung auf dem Ubuntu-Desktop verwenden, das wird mir wirklich helfen.
LinuxBill

1
Wie kann ich die vollständige Antwort eines Befehls erhalten, gibt os.system("nslookup gmail.com")nur die letzte Zeile zurück 0, aber ich möchte die vollständige Antwort erhalten.
Parthapratim Neog

3
@JorgeVargas Kannst du mir helfen zu verstehen, warum der Unterprozess für alles verwendet werden sollte? Warum ist es sicherer?
Soutzikevich

38

Ich bevorzuge die Verwendung eines Unterprozessmoduls:

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

Der Grund dafür ist, dass Sie, wenn Sie eine Variable im Skript übergeben möchten, auf sehr einfache Weise beispielsweise den folgenden Teil des Codes übernehmen können

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

Hat gut funktioniert, als ich ein Bild mit zusätzlichen Parametern geöffnet habecall(["eog", "1breeproposal.png", "-f"])
Josh


4

Sie sollten auch in command.getstatusoutput nachsehen

Dies gibt ein Tupel der Länge 2 zurück. Das erste ist die Rückgabe-Ganzzahl (0 - wenn die Befehle erfolgreich sind). Das zweite ist die gesamte Ausgabe, wie im Terminal angezeigt wird.

Für 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'")

Das sollte funktionieren. Ich weiß nicht, wie ich die Ausgabe in die Python-Shell drucken soll.



1

Jupyter

In einem Jupyter-Notizbuch können Sie die magische Funktion verwenden !

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

Ipython

Um dies als .pySkript auszuführen , müssten Sie verwendenipython

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

Skript ausführen

$ ipython my_script.py

0

Sie können das 'os'-Modul importieren und wie folgt verwenden:

import os
os.system('#DesiredAction')

0

Verwenden Sie für Python3 den Unterprozess

import subprocess
s = subprocess.getstatusoutput(f'ps -ef | grep python3')
print(s)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.