Seite 1 von 1

Linux Konsole über Python3 ansprechen, Befehle eingeben

Verfasst: Mittwoch 27. Dezember 2017, 11:18
von frcom
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!

Re: Linux Konsole über Python3 ansprechen, Befehle eingeben

Verfasst: Mittwoch 27. Dezember 2017, 11:44
von nezzcarth
@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).

Re: Linux Konsole über Python3 ansprechen, Befehle eingeben

Verfasst: Mittwoch 27. Dezember 2017, 12:42
von frcom
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?

Re: Linux Konsole über Python3 ansprechen, Befehle eingeben

Verfasst: Mittwoch 27. Dezember 2017, 19:06
von nezzcarth
@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.

Re: Linux Konsole über Python3 ansprechen, Befehle eingeben

Verfasst: Donnerstag 28. Dezember 2017, 11:37
von frcom
@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!

Re: Linux Konsole über Python3 ansprechen, Befehle eingeben

Verfasst: Donnerstag 28. Dezember 2017, 11:44
von Sirius3
@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.