2011-08-16 8 views
1

から得られる標準出力の最初の行を印刷することができますどのように、私はプログラムのバージョン番号が私はループのため、以下のシェルコマンド

 
for program in sub3_required_programs: 
     try: 
      version = subprocess.call([program, '-i'])                  
      print version + '\n' 
     except: 
      exit 

をインストールし、印刷しかし、私は実際には最初の行だけをしたいですこれにはバージョン番号が付いています。どのように私は最初の行のみ

答えて

0

現在のプリントアウトとは何ですか?異なる動作をするPythonのバージョンを実行している場合を除き、呼び出しの戻り状態がバージョンに割り当てられている唯一のものであるように見えます。

引数を指定してコマンドを実行します。コマンドが完了するまで待ってから、 returncode属性を返します。

からdocstring for subprocess.call

私はsubprocess.callはそれがSTDOUTに出力します印刷し、犯人である賭けます。そのprintステートメントがない場合でも、メソッドの働きにより、サブプロセス呼び出しのすべての出力が表示されます。実際の出力をつかむために

、あなたはより多くの

lines = subprocess.Popen([program, '-i'], stdout=subprocess.PIPE).communicate()[0] 
print lines.splitlines()[0] + '\n' 

ようcommunicate呼び出しはタプル(stdoutdata, stderrdata)を返す何かをしたい場合があります。 docsで詳細を読むことができます。他のすべては自明でなければなりません。

0

スプリット改行文字の文字列に印刷を制限し、結果のリストの最初の要素だけを使用することができます。

print version.split('\n')[0] 
+0

まだすべての行を印刷しています:( – kamal

+1

@kamalもちろん動作しません。\ nは改行ではなく\ nで分割しようとします。\ nは\とnの2文字を意味するからです。 Pythonでの引用の詳細については、[documentation](http://docs.python.org/reference/lexical_analysis.html#strings)を参照してください。私の答えを見てください – radious

+0

@radious ..それはまったく違う 'len( '\ n')== 1' – eduffy

3

あなたが行うことができます。

print version.split("\n")[0] 

出力から最初の行(改行文字で分割)を取得します。

2

str.split('\n')のアプローチの問題は、改行文字がプラットフォームによって異なる可能性があることです。

print version.splitlines()[0] 
関連する問題