Mit OS.System ist es ja möglich Befehle direkt an die Shell zu übergeneb und ausführen zu lassen. Wenn ich beispielsweise ein Nautilus starten möchte, so wäre dies mit
os.system("nautilus")
kein Problem.
Wenn ich jedoch mehr als nur die Übergabe von Befehlen an die Shell vornehmen möchte, beispielsweise eine Auswertung der Rückgabewerte, weis ich nicht, wie ich dies bewerkstelligen kann.
os.system("sudo nautilus")
würde zum Beispiel eine Instanz von Nautilus mit Adminrechten starten. Jedoch reagiert die Shell darauf natürlich mit einer Passwortabfrage. Nun möchte ich, das diese Passwortabfrage wiederum an mein Python Programm weitergeleitet wird und das Programm daraufhin die gewünschten Daten an die Shell schickt.
Ich bin mir völlig im klaren darüber, dass dies eine sicherheitstechnische Katastrophe darstellt. Hierbei handelt es sich aber auch nur um ein Beispiel. Vielen dank
Mit Programmen kommunizieren
sudo nautilus... Das is natürlich doof, wenn das System kein sudo hat, finde ich. Du solltest eher von dem Linuxbenutzer erwarten, dass'r es als root startet, das Programm.
(Edit: Falls du tatsächlich ein stdin oder stdout benutzen möchtest, solltest du in die Dokumentation von subprocess gucken und subprocess.PIPE als Argument für'n stdin benutzen... dann mit'r write Methode arbeiten. Wenn ich das richtig in Errinerung habe)
(Edit: Falls du tatsächlich ein stdin oder stdout benutzen möchtest, solltest du in die Dokumentation von subprocess gucken und subprocess.PIPE als Argument für'n stdin benutzen... dann mit'r write Methode arbeiten. Wenn ich das richtig in Errinerung habe)
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Grundsätzlich: subprocess, wird in dem Falle aber vermutlich nicht tun weil sudo stty o.ä. verwendet
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
-
- User
- Beiträge: 34
- Registriert: Sonntag 24. August 2008, 21:50
Wie kann ich denn im allgemeinen eine Benutzereingabe durch ein Python Script simulieren? Ist das subprocess Modul da immer die richtige Lösung? Ein hochgegriffenes Beispiel wäre ein GUI-Frontend für nmap (ein Linux Netzwerkdiagnoseprogramm) zu schreiben (ich weiss, dass es dies bereits gibt -> Zenmap). Dabei handelt es sich um ein Tool, welches im Normalfall über die Shell bedient wird.
Bitte versteht, dass ich diese Frage stelle, bevor ich die subprocess Doku lese, und später feststelle, dass es doch nicht das richtige Modul ist.
Bitte versteht, dass ich diese Frage stelle, bevor ich die subprocess Doku lese, und später feststelle, dass es doch nicht das richtige Modul ist.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, wenn das Programm ttys verwendet, dann ist Pexpect die richtige Lösung. Ich habe auch schon überlegt, ob sudo das macht, wäre aber logisch.alfonsospringer hat geschrieben:Ist das subprocess Modul da immer die richtige Lösung?
Andererseits wird das Lesen der Subprocess-Doku dich nicht umbringen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 34
- Registriert: Sonntag 24. August 2008, 21:50
Dem kann ich leider nicht wiedersprechen Hab grade nach ttys gesucht, bin aber nur auf eine Schnittstelle in der Elektronik gestoßen. Kann mir jemand kurz erklären was ttys ist und was ein Programm, dass ttys für die Eingabe/Ausgabe verwendet von einem anderen Programm unterscheidet? Ich hatte immer angenommen, dass diese "simplen" Text-Ein-und-Ausgaben immer identisch sind.Andererseits wird das Lesen der Subprocess-Doku dich nicht umbringen.
Vielen dank für eure bisherigen Posts
Gibt es eigentlich eine Liste der gebräcuhlichsten Python Modulen und deren Verwendungszwecken? Ich habe bisher nur den Global Module Index gefunden, aber da ich die Namen eines Moduls noch nicht 100%ig mit deren Inhalt assoziieren kann ist das zZ. ein wenig umständlich. Was ich meine:
import os - ermöglich Zugriff auf (gewisse) Funktionalitäten des Betriebssystems
import serial - ermöglicht Zugriff auf die serielle Schnittstelle
.
.
.
Wäre ungemein hilfreich
tty steht afaik für Teletypewriter. Heute bezeichnet man damit unter Unix-artigen Systemen serielle Schnittstellen und eben auch die Terminals (z.B. die virtuellen Terminals oder die Pseudoterminals von Terminalemulatoren).alfonsospringer hat geschrieben:Dem kann ich leider nicht wiedersprechen Hab grade nach ttys gesucht, bin aber nur auf eine Schnittstelle in der Elektronik gestoßen.Andererseits wird das Lesen der Subprocess-Doku dich nicht umbringen.
Normalerweise reserviert der Kernel (kann sein, dass das auch die libc macht) beim Start eines Prozesses drei Dateideskriptoren, zwei für die Ausgabe und einen für die Eingabe, und assoziiert diese mit dem darunterliegenden tty-Gerät (aka controlling terminal).
Theoretisch kann man Passwörter auch von der Standardeingabe lesen (aka sys.stdin), allerdings hat das z.B. den Nachteil, dass diese Art der Eingabe von Shellumleitungen betroffen ist. Etwas wie "sudo command < myfile" wäre dann nicht möglich.
Deswegen öffnen Programme wie sudo das controlling terminal nochmal separat, setzen ein paar Terminaloptionen (u.a. wird das Echo ausgeschaltet, um die Buchstaben auszublenden), und lesen das Passwort dann direkt.
Der Nachteil dieser Methode ist, dass man solche Eingaben nur sehr schlecht automatisieren kann, weil das automatisierende Programm im Prinzip ein pty (pseudo terminal) reservieren muss, und das zu automatisierende Programm dann darauf ausführen muss, was ohne irgendwelche Komfort-Module relativ aufwendig ist. Außerdem ist diese Schnittstelle afaik zwar standardisiert, aber trotzdem mehr oder minder unportabel.
Mehrere, Forumssuche bemühen.Gibt es eigentlich eine Liste der gebräcuhlichsten Python Modulen und deren Verwendungszwecken?