1
私が達成しようとしているのは、いくつかの自動化スクリプトの出力を実行して戻すことですが、なぜスクリプトでENV varsを使用できないのか理解できません。python 3でサブプロセスを使ってコマンドを実行しているときにENV varsを使用していますか?
簡単な例私は私が間違っているのは何
import os
import subprocess as sp
cmd = [ 'echo', '$_TEST' ]
myenv = {**{'_TEST':"is it working?"}, **os.environ }
pipe = sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE, env=myenv );
print(pipe.communicate())
を実装するのに苦労していますか?
更新:正解を得た後。
import os
import subprocess as sp
cmd = [ '/bin/echo', '$_TEST' ]
myenv = {**{'_TEST':"is it working?"}, **os.environ }
pipe = sp.Popen(" ".join(cmd), stdout=sp.PIPE, shell=True, stderr=sp.PIPE, env=myenv );
print(pipe.communicate() )
我々は変数を評価する必要があるシェル、シェルの引数
shell=True
を提供(またはその他のシェルへのパスを提供)する必要があります。コマンドのlist
をので、あなたのソリューションは、単に元のテキストを印刷し、string
(例えば「/ binに/エコーの$ _TEST」)
ああ!ありがとうございました!私は 'shell = True'を設定するとちょっと混乱しました。出力がまったく得られませんでしたが、最初の引数として' list'を 'string'に変更するとすぐに動作します。私はサブプロセスの内部構造とそれがどのように機能するかについて詳しく知る必要があると思います。 – Butuzov
@OlegButuzovええ、それはあなたがcmdの種類を変更する必要が少し紛らわしいです。 – CaptainTrunky