440 Stimmen

Python subprocess/Popen mit einer geänderten Umgebung

Ich glaube, dass die Ausführung eines externen Befehls mit einer leicht veränderten Umgebung ein sehr häufiger Fall ist. So mache ich es in der Regel auch:

import subprocess, os
my_env = os.environ
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]
subprocess.Popen(my_command, env=my_env)

Ich habe das Gefühl, dass es einen besseren Weg gibt; sieht das gut aus?

6voto

Noufal Ibrahim Punkte 68934

Der Parameter env akzeptiert ein Wörterbuch. Sie können einfach os.environ nehmen, einen Schlüssel (Ihre gewünschte Variable) hinzufügen (zu einer Kopie des Diktats, wenn Sie müssen) und ihn als Parameter für Popen .

2voto

derigible Punkte 954

Ich weiß, dass diese Frage schon vor einiger Zeit beantwortet wurde, aber es gibt einige Punkte, die einige vielleicht über die Verwendung von PYTHONPATH anstelle von PATH in ihrer Umgebungsvariablen wissen möchten. Ich habe eine Erklärung für die Ausführung von Python-Skripten mit Cronjobs skizziert, die mit der geänderten Umgebung anders umgeht ( hier gefunden ). Ich dachte, es wäre gut für diejenigen, die, wie ich, ein bisschen mehr brauchen, als diese Antwort liefert.

0voto

Andrew Aylett Punkte 37790

Unter bestimmten Umständen kann es sinnvoll sein, nur die Umgebungsvariablen weiterzugeben, die der Unterprozess benötigt, aber ich denke, im Allgemeinen haben Sie die richtige Idee (so mache ich es auch).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X