2017-08-22 1 views
0

J'essaie d'utiliser une variable d'environnement dans un cmd de sous-processus appelé par python.Sous-processus python env var dans la commande

J'ai essayé

myvar="myval" 
echo $myvar 
>>myval 

python3:

import os 
import subprocess 
from subprocess import PIPE 

env_vars = dict(os.environ) 
task_cmd = "echo $myvar/stuff" 
sp = subprocess.Popen(task_cmd, shell=True, stdout=PIPE, stderr=PIPE, universal_newlines=True, env=env_vars) 
sp.communicate() 

out: 
>> ('/stuff\n', '') 

Comment puis-je faire que ma sortie est ('myval/stuff\n', '')

Merci!

Répondre

1

Je pense que je vois le problème. Vous devez export cette variable pour qu'elle soit propagée aux processus enfants.

Essayez

export myvar="myval" 
+0

J'ai besoin que dans la commande elle-même, je ne suis pas besoin d'être à la disposition du processus enfant. Je pensais en fait que l'OS ferait la substitution plutôt que Python. Je pense que votre première réponse était ce que je cherchais, comme vous avez raison, je peux simplement faire le formatage en python. – AdrianBR

+0

Il n'y a pas de processus fils appelé 'echo' ... vous exécutez en gros le shell par défaut, qui est un processus fils des processus python, et si vous voulez qu'il soit capable d'interpoler une variable, vous devez la transmettre. –

+0

Ah, je comprends! Je n'ai pas réalisé que le shell n'avait pas les variables d'environnement disponibles s'il n'était pas passé – AdrianBR