Linux Konsole über Python3 ansprechen, Befehle eingeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
frcom
User
Beiträge: 49
Registriert: Sonntag 24. September 2017, 19:35

Hallo liebe Community,
Ich würde gerne eine Reihe von Befehlen auf meinem Linux-Rechner automatiesieren... Wie ich über Python einen Befehl in die Konsole bringe denke ich weiß ich:

Code: Alles auswählen

import os
os.system("Befehl")
Wenn ich das eingebe, wird ja in der Konsole, in der ich Python nutze, python beendet und die normale Linux Konsole benutzt... Ein Problem, wenn ich beispielsweise ein "sudo" vor den Befehl setze und ich erst das Root-Passwort eingeben muss oder einfach noch einen zweiten Befehl ausführen lassen will. Kann ich beispielsweise dieses Passwort in eine Textdatei oder das Pythonskript schreiben und direkt nach der Aufforderung eintragen lassen?

Und da wäre noch eine zweite Frage: Kann ich, wenn ich z.B. das Auslesen meiner IP automatisieren möchte, über das Skript den output nach dem Befehl ifconfig irgendwie nach bestimmtet Buchstaben/Zahlen durchsuchen?

Vielen Dank und gute letzte Tage 2017!
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

@frcom
Genau genommen wird mit 'os.system' nichts beendet, sondern nur angehalten: Unter Linux sind Prozesse hierarchisch organisiert. 'os.system' startet einen Unterprozess, der vom jeweiligen Python-Prozess abhängig ist. Der Python-Prozess wartet solange, bis der Unterprozess beendet ist und wird dann fortgesetzt.

Eigentlich ist es schon richtig so, dass das Skript nach dem (root-)Passwort fragt und ich würde auch nicht empfehlen, das in irgendeiner Weise zu automatisieren. Wenn dein Skript zur Ausführung unbedingt bestimmte Privilegien braucht, sollte es gleich mit diesen gestartet werden.

Prinzipiell wird eigentlich immer empfohlen, statt 'os.system' das subprocess Modul zu verwenden. Damit ist auch die Auswertung externer Ausgaben besser zu bewerkstelligen (falls es nicht eine Python-Bibliothek gibt, die das schon kann).
frcom
User
Beiträge: 49
Registriert: Sonntag 24. September 2017, 19:35

Okay, vielen Dank erstmal, ich werde mir den Link ma genauer anschauen...
Noch schnell eine kurze Frage: Kann ich irgendwie das Pythonskript über Konsole1 starten und dann die Befehle, die von Python an die Konsole gesendet werden sollen auf Konsole2 anwenden? oder ist das genau das was du mit unterprozessorganisationmeinst, dass sowas eben nicht gemacht wird?
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

@frcom: Leider verstehe ich nicht ganz, was du meinst bzw. vorhast. Kannst du das vielleicht noch einmal etwas ausführlicher erklären? Was ist denn das Ziel?

Die Passage mit dem "was man nicht machen sollte" (meiner Meinung nach) bezog sich nur auf deine Passwort-Frage. Die Funktionalität die von os.system und subprocess bereitgestellt wird, kann man schon verwenden. Die beiden machen ähnliche Dinge, nur wird subprocess inzwischen halt bevorzugt.
frcom
User
Beiträge: 49
Registriert: Sonntag 24. September 2017, 19:35

@nezzcarth: Ich versuche nochmal genauer zu beschreiben, was ich erreichen will: Im Prinzip will ich eine Reihe von Befehelen, die ich in einem Pythonskript einschreibe in der Linuxkonsole ausführen. Erstes Ziel: Das Skript soll die IP-Adresse meines Rechners ausgeben. Das ganze über "ifconfig", den Output davon in eine .txt speichern und in dieser .txt nach der IP suchen und printen. Und als nächstes wird ein Befehl ausgeführt, der als einen Parameter die IP, die das Skript zuvor ausgelesen hat benutzt.

Mein Problem dabei: Wenn ich das Skript, so wie ich es jetzt im Moment habe laufen lasse, wird nach der ersten os.system-Zeile im gleichen terminal, in dem ich das Skript laufen lasse, in die Linuxkonsole gewechselt und alle im Skript nachfolgenden Zeilen werden nichtmehr bearbeitet :/

vielen Dank nochmal!
Sirius3
User
Beiträge: 17748
Registriert: Sonntag 21. Oktober 2012, 17:20

@frcom: ohne Deinen Code zu kennen, kann man nicht sagen, was Du falsch machst. Jedenfalls ist das Suchen der IP in einer Text-Datei, die eine ifconfig-Ausgabe ist, reichlich kompliziert.
Antworten