Seite 1 von 2

Tutorial zu Subprocesses

Verfasst: Freitag 14. Januar 2011, 14:18
von Robokopp
Hallo

kennt jemand ein für den Anfänger verständliches, am besten deutsches Tutorial zu Unterprozessen?
Hab mir die Englische Seite dazu durchgelesen und werde daraus nicht schlau.
Vorallem interessiert mich die Struktur, denn dazu habe ich keine wirkliche Beschreibung gefunden.

MfG

Re: Tutorial zu Subprocesses

Verfasst: Freitag 14. Januar 2011, 14:40
von Warhead
Hallo,

leider nicht in Deutsch, aber immer wieder gerne gelesen und referenziert:

Re: Tutorial zu Subprocesses

Verfasst: Freitag 14. Januar 2011, 16:28
von Robokopp
Hm schade

Trotzdem danke

Re: Tutorial zu Subprocesses

Verfasst: Sonntag 16. Januar 2011, 00:52
von Robokopp
Habe jetzt ein paar Versuche mit subprocess.Popen('root', shell=True) und subprocess.Popen('rm /pf/ad/Datei', shell=True) gestartet

Leider ist da nichts geschehen, d.h. nach dem Vorgang war die Datei noch vorhanden. Durch manuelle Eingabe im Terminal wurde die Datei jedoch gelöscht.

Außerdem wollte ich die Programmkataloge per subprocess.Popen('apt-get update', shell=True) aktualisieren, doch da kam die Meldung, dass dpkg "locked" ist und "are you root?"

Was noch bemerkenswert war, war der Befehl find /| grep Datei
Normalerweise sollten nur Dateien gefunden werden, die dem Dateinamen entsprechen, doch die Ausführung über Subprocess führt zur Anzeige von Dateien, die bei weitem nichts mit dem Dateinamen zutun haben.


Was mache ich falsch?

Re: Tutorial zu Subprocesses

Verfasst: Sonntag 16. Januar 2011, 04:16
von Leonidas
Erstens, sind die Aufrufe von subprocess jeweils voneinander unabhängig. Wenn du ``root`` ausführst (was soll das überhaupt sein?) und danach ``rm foobar`` heißt das nicht, dass ``rm foobar`` mit root-Rechten ausgeführt wurde. Zweitens: man sollte die Parameter nicht als String sondern als Liste angeben. Drittens: man sollte shell=True vermeiden.

Das siehst du etwa am Aufruf von ``apt-get``. Du bist nicht root. Als normaler User kann man apt-get nicht dazu bringen irgendwie die installierten Pakete zu aktualisieren.

Re: Tutorial zu Subprocesses

Verfasst: Donnerstag 20. Januar 2011, 13:43
von Robokopp
Ich verwende das Betriebssystem Maemo, unter dem man mit dem Befehl "root" oder "sudo gainroot" Rootrechte bekommt.Der Befehl ist also gültig.

wie soll ich die Parameter als Liste angeben bzw welche Parameter überhaupt?
Und was soll ich anstelle von shell=True benutzen?

Re: Tutorial zu Subprocesses

Verfasst: Donnerstag 20. Januar 2011, 14:48
von BlackJack
@Robokopp: Der Befehl selbst mag ja gültig sein, der gilt aber auch nur "für sich selbst". Wenn Du in einem `subprocess`-Aufruf root Rechte erlangst, dann gilt das nur für *genau den* Kindprozess und nicht für Befehle die Du danach mit weiteren `subprocess`-Aufrufen startest. Das müsstest Du also in einem Aufruf machen. Zum Beispiel in dem Du den Befehl und seine Argumente an ``sudo`` als Argumente übergibst.

Befehl und Parameter solltest Du als Liste übergeben und dafür das ``shell=True`` weglassen. Dann wird das nämlich nicht über eine zusätzliche Shell ausgeführt, die man dafür eigentlich gar nicht braucht. Und man muss sich bei den Parametern auch nicht darum kümmern, dass bestimmte Zeichen vor der Shell geschützt werden müssen.

Du musst Dich damit auseinander setzen, wie Prozesse starten und Parameter übergeben auf Programmebene funktioniert. Also was zum Beispiel eine Shell mit der Zeichenkette macht, die Du eingibst bevor damit ein Prozess gestartet werden kann.

Re: Tutorial zu Subprocesses

Verfasst: Donnerstag 20. Januar 2011, 15:50
von Robokopp
Okay
aber ich kann die Terminalbefehle nicht aneinanderreihen innerhalb eines Subprozesses, also so subprocess.Popen("root","apt-get update", etc...) oder?

Re: Tutorial zu Subprocesses

Verfasst: Donnerstag 20. Januar 2011, 16:19
von Leonidas
Was du nutzen willst ist dann eher sudo

Re: Tutorial zu Subprocesses

Verfasst: Donnerstag 20. Januar 2011, 18:34
von Robokopp
wieso denn bitte sudo?
der Befehl heißt nunmal root auf der Plattform
Mir ging es nur um die Aneinanderreihung der Befehle

Re: Tutorial zu Subprocesses

Verfasst: Donnerstag 20. Januar 2011, 18:55
von busfahrer
Hallo

dann übergib die Argumente doch mal als Liste wie es dir schon geraten wurde

Code: Alles auswählen

subprocess.Popen(["root", "apt-get", "update"])
Gruß....busfahrer

Re: Tutorial zu Subprocesses

Verfasst: Donnerstag 20. Januar 2011, 21:47
von Robokopp
achso war das gemeint
vielen dank :lol:

ohne shell=True geht bei mir garnix

Re: Tutorial zu Subprocesses

Verfasst: Donnerstag 20. Januar 2011, 21:57
von Leonidas
Moment, kannst du ``root apt-get foobar`` ausführen? oder erst ``root`` und dann `at-get foobar``?

Re: Tutorial zu Subprocesses

Verfasst: Freitag 21. Januar 2011, 20:44
von Robokopp
nein
er führt zwar den root Befehl aus, aber danach ist schluss.

Habe es als Liste ausgeführt, wie Busfahrer beschrieben hat

mfg

Re: Tutorial zu Subprocesses

Verfasst: Freitag 21. Januar 2011, 21:23
von BlackJack
@Robokopp: Die Frage war ob *Du* ohne ein Programm das auf der Kommandozeile so ausführen kannst. Kann ``root`` das überhaupt? Oder braucht es dafür vielleicht eine Option!? Oder nimm doch einfach ``sudo``. Aber bitte in dessen Dokumentation schauen und nicht wild raten.

Re: Tutorial zu Subprocesses

Verfasst: Freitag 21. Januar 2011, 23:09
von Robokopp
achso
E: invalid operation foobar ist das Resultat

Re: Tutorial zu Subprocesses

Verfasst: Samstag 22. Januar 2011, 01:08
von Leonidas
``foobar`` war doch nur ein Platzhalter für irgendeine Operation. Die frage ist halt, ob du mit root direkt Programme mit root-Rechten starten kannst, oder das nur in der von ``root`` geöffneten root-Shell machen kanns. Mir scheint dass das funktioniert. Aber gut, probier mal ``root whoami`` auszuführen, um sicherzugehen.

Re: Tutorial zu Subprocesses

Verfasst: Samstag 22. Januar 2011, 13:08
von Robokopp
Achso

Ja es geht nur, wenn ich schon root bin und nicht wenn ich den root-Befehl mit einem anderen kombiniere

Re: Tutorial zu Subprocesses

Verfasst: Samstag 22. Januar 2011, 13:10
von Leonidas
Ok, das ist schlecht. Kannst du das nicht mit ``sudo`` nutzen?

Re: Tutorial zu Subprocesses

Verfasst: Samstag 22. Januar 2011, 14:25
von Robokopp
den sudo befehl kennt er zwar, jedoch verlangt er ein passwort und ich wüsste nich, dass ich irgendwann mal ein passwort auf dem handy festgelegt hab außer dem pin
und der funktioniert nicht