Set Umwelt-Variablen in Python mit Popen

Will ich setzen einer Umgebungsvariablen in linux-terminal durch ein python-Skript. Ich scheine in der Lage sein, Umwelt-Variablen bei der Verwendung von os.environ['BLASTDB'] = '/path/to/directory' .

Allerdings war ich zunächst versuchen, diese variable mit subprocess.Popen ohne Erfolg.

import subprocess
import shlex

cmd1 = 'export BLASTDB=/path/to/directory'
args = shlex.split(cmd1)
p = subprocess.Popen(args, stdout=subprocess.PIPE).communicate()

Warum subprocess.Popen fehlschlagen, setzen Sie die Umgebungsvariable BLASTDB zu '/Pfad/zu/Verzeichnis'?

HINWEIS:
Auch dies nicht zum Erfolg, wenn Sie verwenden:

import os
os.system('export BLASTDB=/path/to/directory')
  • Hinweis: Popen nicht eine shell ausführen. export ist ein shell-built-in, so dass Sie bekommen würde, eine "Datei nicht gefunden "- Fehler" wenn Sie versuchen zum ausführen dieses Befehls. Verwenden shell=True zum ausführen von shell-Kommandos (und sich bewusst sein, die security-Risiken!!!)
  • Von meinen Tests scheint es, dass auch beim hinzufügen shell=True dem Befehl es nicht wirklich ändern Sie die Umgebungsvariable aus, die mein python-Skript ausgeführt wurde, noch ändert es die Umgebungsvariablen für python subshell erstellt wurde, bei der Ausführung. Dies kann nur die Umgebung ändern, für diesen einen bestimmten Teilprozess, die (ohne die env hinaus) wird mir nicht erlauben, einen Befehl ausführen, um das terminal mit einer modifizierten Umgebung für diesen Teilprozess.
  • Ich habe nie angegeben, dass shell=True lösen würde Ihr problem (sonst würde ich ja gepostet, dass da eine Antwort). Mit shell=True wäre eine Voraussetzung, um der Lage sein, shell-Befehle ausführen. Ohne es werden Sie Fehler erhalten, weil Popen ist nicht in der Lage, finden Sie die ausführbare Datei.
  • Vereinbart, ich war versuchen zu klären, für zukünftige Besucher in Bezug auf mein Problem.
Schreibe einen Kommentar