Erstellen Sie ein Python-Skript, um ein neues Terminal zu öffnen und Befehle in Linux auszuführen

Jay Shaw 21 Juni 2023
  1. Erstellen Sie ein Python-Skript, das ein neues Terminal öffnet und Befehle in Linux ausführt
  2. Erstellen Sie ein Python-Skript, um die Python-Version in Linux zu überprüfen
  3. Python-Skript, um ein geöffnetes Terminal am Leben zu erhalten und darin Befehle auszuführen
  4. Übergeben Sie Befehle an das neue Terminal mit dem Python-Submodul subprocess() in Linux
  5. Abschluss
Erstellen Sie ein Python-Skript, um ein neues Terminal zu öffnen und Befehle in Linux auszuführen

Das Linux-Betriebssystem ist bekannt für sein vielseitiges Terminal, das Programmierer ausgiebig verwenden. Aber es gibt Situationen, in denen wir wiederholt dieselbe Syntax schreiben, was langweilig und zeitaufwändig sein kann.

Haben Sie sich jemals gefragt, ob es eine Möglichkeit gibt, Linux-Befehle vorab in eine Datei zu schreiben und sie dann sofort im Terminal auszuführen? Ja! Du kannst.

Sie können eine vorgefertigte Terminalsyntax in eine Datei schreiben und alles auf einmal ausführen, indem Sie ein Python-Skript schreiben. In diesem Artikel wird erläutert, wie Sie ein Python-Skript erstellen, um ein neues Terminal zu öffnen und einen Befehl für uns auszuführen.

Erstellen Sie ein Python-Skript, das ein neues Terminal öffnet und Befehle in Linux ausführt

Bevor wir beginnen, wollen wir einige Grundlagen wiederholen. Python-Skripte werden in Befehlszeilenschnittstellen ausgeführt, indem die Datei gesucht und dann ausgeführt wird. Diese Dateien werden ausgeführt und zeigen die Ausgabe an.

Es gibt viele Möglichkeiten, ein Python-Skript zu erstellen, um ein neues Terminal zu öffnen und einen Befehl auszuführen. Im ersten Beispiel wird gezeigt, wie ein Python-Skript erstellt wird, das einen Linux-Befehl übergibt, um die Python-Version im System zu überprüfen.

Erstellen Sie ein Python-Skript, um die Python-Version in Linux zu überprüfen

Wenn die Python-Version überprüft werden muss, indem der Befehl direkt in das Terminal geschrieben wird, wird diese Syntax verwendet:

python3 --version

Welche die Python-Version im System anzeigt, wie die folgende:

jay@jay-virtual-machine:~$ python3 --version
Python 3.10.6

Dies ist eine Befehlszeilensyntax, was bedeutet, dass sie nur in einem Terminal geschrieben werden kann. Wenn es als reiner Text in eine Textdatei mit der Erweiterung .py geschrieben werden soll (z. B. test.py), führt dies zu einem Fehler.

python3 --version

Ausgang:

jay@jay-virtual-machine:~$ python3 test.py
Traceback (most recent call last):
  File "/home/jay/test.py", line 1, in <module>
    python3 --version
NameError: name 'python3' is not defined

Um dieses Problem zu lösen, muss ein Python-Skript erstellt werden, damit die Syntax sowohl für den Python-Compiler als auch für das Terminal sinnvoll ist.

Um ein Python-Skript zu erstellen, um ein neues Terminal zu öffnen und einen Befehl auszuführen, erstellen Sie eine Textdatei mit der Erweiterung .py und schreiben Sie die folgende Syntax:

import os

My_Cmmnd = "python3 --version"
os.system("gnome-terminal -e 'bash -c \"" + My_Cmmnd + ";bash\"'")

Was macht der Code?

  1. Das Python-Modul os wird in der ersten Codezeile importiert. Dieses Modul hilft, Befehle an das Betriebssystem zu übergeben.

  2. Die auszuführende Befehlszeilensyntax wird in der Variablen namens My_Cmmnd gespeichert. Die in diesem Beispiel verwendete Syntax überprüft die Python-Version des Systems.

    My_Cmmnd = "python3 --version"
    
  3. Die dritte Codezeile sendet den Befehl an das System.

    os.system("gnome-terminal -e 'bash -c \"" + My_Cmmnd + ";bash\"'")
    

Das obige Code-Snippet bewirkt Folgendes:

  1. Das os.system() startet eine Sub-Shell und führt den Befehl in den Klammern aus.
  2. Der Befehl gnome-terminal startet ein neues gnome-terminal im Linux-Betriebssystem.
  3. Der Inhalt der Variablen My_Cmmnd wird als Bash-Befehl zur Ausführung an das neue Terminal gesendet.

Das Skript führt die Syntax aus und zeigt die gewünschte Ausgabe an.

Python 3.10.6
jay@jay-virtual-machine:~$

Python-Skript, um ein geöffnetes Terminal am Leben zu erhalten und darin Befehle auszuführen

Das letzte Beispiel zeigte, wie man ein Python-Skript erstellt, um ein neues Terminal zu öffnen und einen Befehl auszuführen, indem es in einer Variablen gespeichert wird.

Wenn die Syntax andererseits ein einzeiliger Befehl ist, kann er direkt eingefügt werden, ohne ihn in einer Variablen zu speichern. Erstellen Sie eine Datei mit der Erweiterung .py und schreiben Sie die folgende Syntax:

import os

os.system("gnome-terminal -e 'bash -c \"python3 --version\" '")

Die obige Syntax startet ein neues Terminal und führt den Befehl aus. Bei dieser Methode wird das Terminal jedoch sofort nach Ausführung des Befehls geschlossen.

Um dieses Problem zu lösen, muss ein sleep-Timer mit dem folgenden Befehl platziert werden:

import os

os.system("gnome-terminal -e 'bash -c \"python3 --version; sleep 5\" '")

Die obige Syntax hält das neue Terminal für 5 Sekunden geöffnet, obwohl es je nach Anforderung verlängert werden kann. Wenn das Terminal auf unbestimmte Zeit aktiv bleiben muss, verwenden Sie die folgende Syntax.

import os

os.system("gnome-terminal -e 'bash -c \"python3 --version; bash\" '")

Dadurch bleibt das Terminal geöffnet und aktiv, bis es vom Benutzer geschlossen wird.

Übergeben Sie Befehle an das neue Terminal mit dem Python-Submodul subprocess() in Linux

Wir haben gelernt, wie man ein Python-Skript erstellt, um ein neues Terminal zu öffnen und einen Befehl mit dem Python-Submodul os auszuführen. Obwohl die Verwendung dieser eingebauten Bibliothek zur Übergabe von Befehlen an das Terminal nicht mehr empfohlen wird.

Das liegt daran, dass os in den neueren Versionen von Python veraltet ist. Um Sicherheitsrisiken zu vermeiden, muss stattdessen das Python-Submodul subprocess verwendet werden.

Um ein Python-Skript zu erstellen, um ein neues Terminal zu öffnen und einen Befehl mit subprocess auszuführen, erstellen Sie eine Datei mit einer .py-Erweiterung ähnlich wie in den vorherigen Beispielen und schreiben Sie diesen Code hinein:

import subprocess

My_Cmmnd = "ls"

process = subprocess.Popen(
    "gnome-terminal -e 'bash -c \"" + My_Cmmnd + ";bash\"'",
    stdout=subprocess.PIPE,
    stderr=None,
    shell=True,
)

Der UNIX-Befehl ls listet die Dateien im aktuellen Verzeichnis auf. Als Ergebnis wird eine Liste der Dateien im aktuellen Verzeichnis angezeigt, wenn dieser Befehl ausgeführt wird.

Zuerst wird das Modul subprocess() importiert; dann werden die Befehle in einer Variablen gespeichert. Innerhalb der Variable namens process werden die Argumente für subprocess() definiert.

Der Konstruktor subprocess.Popen startet einen untergeordneten Prozess in einem neuen gnome-terminal, wenn er die Syntax gnome-terminal -e liest. Zuletzt öffnet das Python-Skript ein neues Terminal und führt den Befehl aus.

Ausgang:

jay@jay-virtual-machine:~$ python3 test.py
Desktop    Downloads  Pictures	snap	   test2.py  Videos
Documents  Music      Public	Templates  test.py

Um mehr über einige andere Funktionen zu erfahren, die die Linux-Shell bietet, wollen wir die Verwendung von subprocess() untersuchen, um Argumente an die Shell zu senden. Zum Beispiel listet der Befehl im Programm unten, ls -la, alle Metadaten und versteckten Dateien auf.

import subprocess

My_Cmmnd = "ls -la"

process = subprocess.Popen(
    "gnome-terminal -e 'bash -c \"" + My_Cmmnd + ";bash\"'",
    stdout=subprocess.PIPE,
    stderr=None,
    shell=True,
)

Ausgang:

ls la Befehl

Dieser Befehl wird als String ausgeführt, wenn das Argument an die Shell übergeben wird. Als Ergebnis interpretiert die Shell den String als Befehlsargument zu Beginn der Ausführung unseres subprocess().

Ein Nachteil der obigen Methode besteht darin, dass die Shell, wenn sie explizit mit shell=true aufgerufen wird, alle Metazeichen, einschließlich Leerzeichen, an den untergeordneten Prozess übergibt, was bei Ereignissen einer Shell-Injektion eine Bedrohung darstellt.

Um eine solche Situation zu vermeiden, verwenden Sie stattdessen eine Python-Liste. Wenn Sie eine Liste verwenden, wird der aufzurufende Befehl am 0. Index der Liste platziert, und die anderen Argumente folgen ihm.

Rufen Sie den im vorherigen Beispiel verwendeten Befehl als Liste auf.

import subprocess

subprocess.run(["ls", "-la"])

Ausgang:

ls la sicherer Befehl

Das Ergebnis des Befehls kann auch in einer Variablen gespeichert werden, indem die Option capture_output=True gesetzt wird.

import subprocess

saved_results = subprocess.run(["ls", "-la"], capture_output=True)

print(saved_results.stdout)

Ausgang:

Ausgabe erfassen

Es ist ersichtlich, dass die Ausgabe das gewünschte Ergebnis anzeigt, aber es gibt keine Indizierung und die Dateinamen sind unorganisiert verteilt. Dies geschieht, weil das System das Ergebnis des Befehls ls -la in Bytes gespeichert hat.

Um das Ergebnis stattdessen als String zu erhalten, setzen Sie die Option text=True.

import subprocess

saved_results = subprocess.run(["ls", "-la"], capture_output=True, text=True)

print(saved_results.stdout)

Ausgang:

String-Ausgabe

Abschluss

In diesem Artikel wird erläutert, wie Sie Python-Skripte erstellen, um ein neues Terminal zu öffnen und Befehle auszuführen. Der Leser, der den Artikel durchgeht, könnte ein Python-Skript erstellen, um ein neues Terminal zu öffnen und Befehle einfach unter Linux auszuführen.