Seite 1 von 1
In subprocess-shell was schreiben, bevor subprocess loslegt
Verfasst: Dienstag 17. März 2009, 17:37
von ivka_sto
Hallo zusammen,
Ich habe nach nem ähnlichen Thema gesucht, aber leider nichts gefunden.
Ich will subprocess mit shell = True aufrufen, doch bevor das Programm startet, das ich als subprocess öffnen will, will ich in genau dieser Shell noch ne EnvVariable ändern. Das geht nicht, oder? Ich müßte mit jeder neu geöffneten Shell die PATH-Variable ändern, wie kann ich das machen, wenn ich eine Shell mit nem subprocess ins Leben rufe? Jemand ne Idee?
Danke schonmal.
Viele Grüße,
ivka_sto
P.S. Bitte fangt jetzt nicht an, mich davon zu überzeugen, daß es ohne Shell besser wäre, weil ich die Shell brauche. Ich weiß es ist schöner und echter ohne usw, doch ich mach's mit

Und ich habe nicht genügend Rechte (glaube ich), um die PATH-Variable global zu ändern, bzw. muß mein Code unabhängig sein vom Rechner, an dem ich es aufrufe (weil ich nicht wisse, ob der, der als Nächster mein Programm benutzt, die PATH-Variable wird ändern können)
Verfasst: Dienstag 17. März 2009, 17:45
von ms4py
Was spricht gegen:
Code: Alles auswählen
os.environ["PATH"] += new_path
proc = subprocess.Popen(...)
Oder funktioniert das unter Linux nicht?
Unter Windows problemlos...
Verfasst: Dienstag 17. März 2009, 17:56
von helduel
Popen akzeptiert ein env-Argument, dem man ein Dictionary mit den gewünschten Environment-Variablen mitgeben kann. Hab das aber selbst nie ausprobiert.
Verfasst: Dienstag 17. März 2009, 18:21
von lunar
Im Übrigen könnte man ja auch einfach absolute Pfade nutzen ...
Re: In subprocess-shell was schreiben, bevor subprocess losl
Verfasst: Dienstag 17. März 2009, 18:43
von Leonidas
ivka_sto hat geschrieben:P.S. Bitte fangt jetzt nicht an, mich davon zu überzeugen, daß es ohne Shell besser wäre, weil ich die Shell brauche. Ich weiß es ist schöner und echter ohne usw, doch ich mach's mit

Und warum?
Verfasst: Dienstag 17. März 2009, 19:11
von audax
Ich will jetzt mit den Föhn in die Badewanne gehen und möchte den Stecker nicht ziehn. Ich weiß, es ist ungefährlicher ohne Strom, doch ich mach's mit.
Verfasst: Dienstag 17. März 2009, 23:40
von BlackJack
@audax: Also ich denke das ist unproblematisch. Nur Wasser solltest Du keines in die Badewanne lassen.

Verfasst: Mittwoch 18. März 2009, 01:04
von ivka_sto
Danke allerseits.
Nun ja - einer der Gründe ist, daß es läuft, und beim jetzigen Stand ist mir das viel wichtiger, als daß es perfekt sauber programmiert ist. Ich bau lieber das Haus fertig bevor es regnet, als am Fenster zu schrauben, wenn das Haus kein Dach hat. Das andere Programm will die als Liste übergebenen Argumente nicht haben, und ich hab einfach nicht rausfinden können, warum. Ist jetzt auch egal.
@ice2k3:
Das ist es genau, so würde ich die EnvVar in der aktuellen shell ändern, ich öffne das subprocess in einer neuen Shell, und dann muß sie in dieser auch neu gesetzt werden.
@lunar:
Wie weit muß denn der absolute Pfad gehen? Der, den ich jetzt einfüge geht von /opt bis /bin. Der absolute würde dann bis ~ gehen? Sorry für die blöde Frage, hab kein Plan

(ja, ihr dürft jetzt jaulen 'das sieht man auch an deinem Umgang mit dem subprocess')
Viele Grüße

Verfasst: Mittwoch 18. März 2009, 07:16
von BlackJack
@ivka_sto: Was Du über `os.environ` setzet gilt nicht nur im aktuellen Prozess (der in dem Fall gar keine Shell ist), sondern auch in allen Kindprozessen. Das hättest Du aber auch ziemlich einfach und schnell selber heraus finden können:
Code: Alles auswählen
In [444]: os.environ['FOOBAR'] = '42'
In [445]: os.system('echo $FOOBAR')
42
Out[445]: 0
In [446]: subprocess.call('echo $FOOBAR', shell=True)
42
Out[446]: 0
Und Du solltest echt besser herausfinden warum es ohne Subshell nicht geht und verstehen was Du beim aufteilen der Argumente falsch machst, statt eine unnötige Shell dazwischen zu schalten. Dein Vergleich mit dem Hausbau hinkt. Du schraubst nicht am Fenster, sondern Du fixierst die Dachpappe mit Büroklammern, statt sie ordentlich zu befestigen.

Verfasst: Mittwoch 18. März 2009, 10:10
von lunar
Diese Vergleiche sind ja fast schon poetisch ...
Wie dem auch sei, ivka_sto, ich denke, es ist besser, wenn du einmal beschreibst, was genau du erreichen möchtest und welche Programme an welchen Orten du aufrufen möchtest. Ich denke, dann kann dir besser geholfen werden ...