2017-05-05 10 views
0

私は、subprocess.getoutput()を使用してcmdを実行し、結果の出力をリストに格納するpythonスクリプトを持っています。さて、私は、スクリプトをターゲットディレクトリに変更してそこでコマンドを実行できるようにする必要があります。それは単純なはずですが、cwdの引数をgetoutput()に渡すことは機能していません。pythonサブプロセス - コマンドを実行するためにdirを変更するには?

アイデア?

例:

私は簡単にsubprocess.Popenでこれを行うことができますが、それは文字列のリストに出力を取得するのは難しいように見えるのdocから
out = subprocess.getoutput(" ".join(cmd), cwd='/my/target/path').splitlines() 

。私はバイナリ文字列のリストに結果を得ることができただけです。

+0

'cwd'は' getoutput'の有効なパラメータではありませんので、リストではなく例外が発生します。あなたの問題は 'cwd'か' bytes'のリストを取得していますか? – tdelaney

答えて

1

subprocess.getoutputは、Legacy Shell Invocation Functionです。 cwd引数を取らず、(status, output)のタプルを返します。あなたはbytesのリストに入る前にいくつかの問題があります。

pythonがプログラムを実行するとき、何らかのコードを出力する必要があるかどうかは分かりません。エンコーディングと仮定すると、 `UTF-8' で、基本的な操作は、stderrに書かれたものは自分のプログラムstderrになり、この実装では

mylist = [] 
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd='/my/target/path') 
for line in mylist: 
    mylist.append(line.decode('utf-8')) 
proc.wait() 

です。また、コマンドをリスト形式にしておき、shell=Trueを実行しなかったことに注目してください。いくつかの作業を行ういくつかのヘルパー関数がありますが、これはすでに簡単です。

関連する問題