2014-09-05 4 views

Antwort

8

Es hängt davon ab, was Sie meinen.

Wenn Sie meinen, das Verhalten des aktuellen Interpreter als die Antwort zu ändern, ist keine:

  1. Ändern os.environ nicht zuverlässig ist, da in einigen OSes Sie die Umgebung nicht ändern können (siehe Dokumentation für os.environ).

  2. Die Umgebungsvariablen werden nur beim Start des Interpreters auf geprüft, so dass sie nach dem Ändern keine Auswirkungen auf die aktuelle Python-Instanz haben. Von the documentation:

    beeinflussen Diese Umgebungsvariablen Python Verhalten, sie vor der Befehlszeile verarbeitet sind Schaltern außer -E oder -I.

    (was bedeutet, dass sie nur beim Starten des Interpreters überprüft werden, lange bevor ein Benutzercode ausgeführt wird).

AFAIK, der zufällige Hash-Samen nicht dynamisch eingestellt werden, so dass Sie den Interpreter neu starten, wenn Sie Hash-Randomisierung aktiviert werden sollen.

Wenn Sie meinen, neue Prozesse gelaicht durch den aktuellen Interpreter verhalten, als ob dieser Wert vor, dann ja, unter der Annahme festgelegt wurde, dass Sie auf einer Plattform laufen, die putenv unterstützt. Wenn ein neuer Prozess erstellt wird, übernimmt er standardmäßig die Umgebung des aktuellen Prozesses. Sie können dies testen, ein einfaches Skript:

#check_environ.py 
import os 
import subprocess 

os.environ['A'] = '1' 
proc = subprocess.call(['python', '-c', 'import os;print(os.environ["A"])']) 

Welche ergibt:

$ python check_environ.py 
1 

Hinweis, dass es existiert bekannte Fehler in putenv Implementierungen (zum Beispiel in Mac OS X), wo es Speicherlecks. Das Ändern der Umgebung ist also etwas, das Sie so weit wie möglich vermeiden möchten.

+1

Mit 'subprocess.call' können Sie umgehen, indem Sie die Umgebung ändern, indem Sie eine explizite, erweiterte Umgebung übergeben. 'e = dict (os.environ); e.update (PYTHONHASHSEED = 'zufällig'); subprocess.call ([...], env = e) ' – chepner

+0

@chepner Ja, das weiß ich gut. Es ist in den Dokumenten eindeutig erwähnt. Ich habe eine Frage zum * Ändern * der Umgebung * des aktuellen Prozesses * beantwortet. Tatsächlich ist dieser Teil der Antwort eine Vermutung darüber, was das OP bedeuten könnte; Wenn er seine Frage bearbeitet und klarstellt, was er meint, werde ich diesen Vorschlag hinzufügen (dies war bereits in meinen Gedanken, als ich die Antwort zum ersten Mal schrieb). – Bakuriu

Verwandte Themen