SzenarioWie eine vorhandene Umgebungsvariable in subprocess.Popen() verwenden
In meinem Python-Skript, ich brauche eine ausführbare Datei als Unterprozess mit x Anzahl der Befehlszeilenparameter ausführen, die die ausführbaren Datei erwartet.
Beispiel:
- EG 1: myexec.sh param1 param2
- EG 2: myexec.sh param1 $ MYPARAMVAL
die ausführbare Datei und Parameter werden nicht, da diese bekannt sind konfiguriert und zur Laufzeit aus einer externen Quelle (xml config) abgerufen.
Mein Code funktioniert, wenn der Parameter ein bekannter Wert (EG 1) und konfiguriert ist, jedoch erwartet man, dass ein Parameter eine Umgebungsvariable sein kann und als solche konfiguriert werden kann, die zur Laufzeit interpretiert werden sollte)
Im folgenden Beispiel verwende ich Echo als Ersatz für myexec.sh, um das Szenario zu demonstrieren. Dies wird vereinfacht, um das Problem zu demonstrieren. 'cmdlst' wird aus einer Konfigurationsdatei erstellt, bei der es sich um ein beliebiges Skript mit einer beliebigen Anzahl von Parametern und Werten handeln kann, das eine Wert- oder Umgebungsvariable sein kann.
test1.py
import subprocess
import os
cmdlst = ['echo','param1','param2']
try:
proc = subprocess.Popen(cmdlst,stdout=subprocess.PIPE)
jobpid = proc.pid
stdout_value, stderr_value = proc.communicate()
except (OSError, subprocess.CalledProcessError) as err:
raise
print stdout_value
ERGEBNIS TEST 1
Python test1.py
-> param1 param2
test2.py
import subprocess
import os
cmdlst = ['echo','param1','$PARAM']
try:
proc = subprocess.Popen(cmdlst,stdout=subprocess.PIPE)
jobpid = proc.pid
stdout_value, stderr_value = proc.communicate()
except (OSError, subprocess.CalledProcessError) as err:
raise
print stdout_value
ERGEBNIS TEST 2
Export PARAM = param2 echo $ PARAM
-> param2 Python test2.py
- > param1 $ PARAM
Ich benötige Test 2, um das gleiche Ergebnis wie Test 1 zu erzielen, wenn man bedenkt, dass $ PARAM nur zur Laufzeit bekannt ist und aus der aktuellen Umgebung abgerufen werden muss.
Ich begrüße Ihren Rat.
tut 'param2 = os.environ [„PARAM“]' tun, was Sie wollen, oder nicht ganz? Ich erinnere mich nie, welche Argumente an "Popen" übergeben werden müssen, um das Zitat korrekt zu machen - das Problem ist, dass es Ihre Argumente so zitiert, dass sie sich nicht erweitern. – dwanderson