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)
In subprocess-shell was schreiben, bevor subprocess loslegt
Was spricht gegen:
Oder funktioniert das unter Linux nicht?
Unter Windows problemlos...
Code: Alles auswählen
os.environ["PATH"] += new_path
proc = subprocess.Popen(...)
Unter Windows problemlos...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Und warum?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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
@audax: Also ich denke das ist unproblematisch. Nur Wasser solltest Du keines in die Badewanne lassen.
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
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
@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:
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.
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
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 ...
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 ...