2009-07-06 3 views
3

この.exeファイルは、それが情報のフル画面を印刷し、私は画面に出特定の行を印刷したい、ここではライン「6」で実行します:pythonを使って出力をプリントするには?

cmd = ' -a ' + str(a) + ' -b ' + str(b) + str(Output) 
    process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 
    outputstring = process.communicate()[0] 
    outputlist = outputstring.splitlines() 
    Output = outputlist[5] 
    print cmd 

これは正常に動作します: cmd = ' -a ' + str(a) + ' -b ' + str(b)

これは動作しません: cmd = ' -a ' + str(a) + ' -b ' + str(b) + str(Output)

私はOutputが定義されていないというエラーを取得します。しかし、私が切り取って貼り付けたとき:cmdステートメントの前には、プロセスが定義されていないことがわかります。

str(Output)は、.exeが実行されたときに6行目に表示されるものでなければなりません。

答えて

0

あなたが言ったように、変数は使用する前に宣言する必要があります。したがって、str(Output)をABOVE Output = outputlist[5]と呼び出すと、出力はまだ存在しません。

cmd = ' -a ' + str(a) + ' -b ' + str(b) 

、あなたはそのコマンドの出力を印刷することができます:

cmd_return = ' -a ' + str(a) + ' -b ' + str(b) + str(Output) 

は直接print cmd_return上記の行である必要がありますが、実際に最初の呼び出しを必要としています。

+0

これは動作しません。Popenの呼び出しにはcmdが必要です。 – AlbertoPL

+0

あなたは 'Popen(cmd、...')を見逃しました。 – avakar

5

呼び出しの結果を呼び出し自体に追加しようとしています。最初に出力を取得するには、+ str(Output)の部分を除いてコマンドを1回実行する必要があります。

このように考えてみましょう。いくつかの数字を一緒に追加していたとしましょう。

z = 5 + b 
b = z + 2 

私は2つの文の順序に応じて、ステートメントの前zまたはbのいずれかを定義する必要があります。私はそれが何であるかを知る前に変数を使うことはできません。あなたはそれを定義する前にOutput変数を使って同じことをやっています。

1

これは、物事を動かす「ダンス」ではありません。それは "="の左側に何があるかの問題です。それが左側にある場合、それは作成されています。右側にある場合は使用されています。

これは、1行目が出力の一部を必要としているため、例は少しでも機能しません。これは最後まで作成されません。

これを理解する最も簡単な方法は、逆方向に作業することです。あなたは最終結果として見たいですか?

print output[5] 

右か?だからそこに着くには、大きな文字列からこれを取得する必要があります。

output= outputstring.splitlines() 
print output[5] 

outputstringはどこから来たのですか?それはいくつかのサブプロセスからだった。

outputstring = process.communicate()[0] 
output= outputstring.splitlines() 
print output[5] 

だからどこからプロセスが来たのですか?これはサブプロセスPopenによって作成されました

process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 
outputstring = process.communicate()[0] 
output= outputstring.splitlines() 
print output[5] 

どこから来たのですか?私は言うことができません。あなたの例は、どのコマンドが実行されているのか理解できません。

cmd = ? 
process = Popen(cmd, shell=True, stderr=STDOUT, stdout=PIPE) 
outputstring = process.communicate()[0] 
output= outputstring.splitlines() 
print output[5] 
1

だけにあなたの最初の行を変更します。(b)は

、最後にprint文+ str 'は-b'

CMD = '-a' + strの(A)+ ...これは、それはあなたが印刷したいです正確に何を知らずにいる

印刷CMD + STR(出力)

あなたの問題がyの前に出力を使用しようとしているかのようにそれは-seems-:へouは実際にOutput変数が何であるかを定義します(上のポストのように)

関連する問題