2017-08-22 16 views
0

私は、python-subprocess cmdでenv変数を利用しようとしています。コマンド内のpythonサブプロセスenv var

私は

myvar="myval" 
echo $myvar 
>>myval 

のpython3みました:どのように私は私の出力が('myval/stuff\n', '')

ありがとうございあること、それを作ることができ

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', '') 

を!

答えて

1

私は問題があると思う。 exportその変数が子プロセスに伝播する必要があります。

は、私が唯一のコマンド自体でそれを必要とする

export myvar="myval" 
+0

を試してみて、私は子プロセスに利用できるようにそれを必要としません。私は実際にOSがPythonではなく代用を行うと考えていました。あなたの最初の答えは私が探していたものだと思います。あなたが正しいので、私は単純にPythonで書式設定を行うことができます。 – AdrianBR

+0

'echo'と呼ばれる子プロセスはありません...あなたは基本的にはデフォルトのシェルを実行しています。これはPythonプロセスの子プロセスであり、変数を補間できるようにするには、渡す必要があります。 –

+0

ああ、私は理解しています!私はシェルが渡されなかった場合、env変数を有効にしていないことに気付かなかった – AdrianBR

関連する問題