2016-05-14 3 views
2

私はどのように私はPythonでos.systemから0を削除することができます思っていた、例えば、この変数に、私は何の問題もなく、それを削除することができます。pythonでos.systemから0フォームを削除するには?

user_name = check_output('whoami').strip() 
output = current-user 

が、事は、私は、この変数を実行したときにということである。

from subprocess import check_output 

subtests = os.system('/home/' + user_name + '/tests/cfile --list-subtests') 
output = subtests 1 
     subtests 2 
     0 

私は

subtests = check_output('/home/' + user_name + '/intel-graphics/intel-gpu-tools/tests/' + line + ' --list-subtests').strip() 

のように最初のコマンドから同じコマンド構造を適用した場合、それが作品のない、I GEいくつかのpythonのエラー、私は多くを研究していましたが、これまで私はこれのための良い修正を見つけることができませんでした。

注I'mm使ってPython 2.7

+0

与えられたコードはまったく機能しません(例えば、 'current-user'は変数、' subtests 1'とそれ以降)。実行可能なコードを投稿してください。 –

答えて

1

os.systemに電話すると、新しいプロセスが開始されます。そのプロセスの標準入力ストリームと出力ストリームはPythonプログラムに接続されています。

I.e.子プロセス出力が端末に書かれたもの(またはあなたのメインプログラムの出力がどこに行くか)をos.systemと呼んだとき。ただ、このように:

>>> result = os.system(".../cfile --list-subtests") 
subtests 1 
subtests 2 
>>> result 
0 

「サブテスト1」/「サブテスト2」以上のライン端子に子プロセスから渡されたテキストだけです。 Pythonで処理されたことはありませんでした。返された値はちょうど0で、通常は操作が正常に完了したことを意味します。

あなたはcheck_output(あなたが最初の例で使用しているまったく同じ!)または汎用Popenのいずれか、出力使用the subprocess moduleをキャプチャしたい場合:

>>> process = subprocess.Popen([".../cfile", "--list-subtests"], stdout=subprocess.PIPE) 
>>> process_out, process_err = process.communicate() 
>>> process_out 
'subtests 1\nsubtests 2\n' 
>>> process.returncode 
0 
+0

thanka、これは私が探していた – shaveax

1

コマンドsubprocess.check_output()プロセスの出力を含む文字列を返します。したがって、文字列メソッドを適用することができます。 os.system()は文字列を返しませんが、戻り値の状態は整数で、strip()は整数ではありません。

表示されている「出力」はプロセス出力であり、画面にまっすぐにダンプされます。あなたがそれを使用したい場合は、check_output()を使用してください。それがそれのためのものです。

+0

mmm、私はあなたを理解できませんでした、私に例を教えてください – shaveax

0

commands.getstatusoutput("your command") 

で試してみてくださいそれを返しますタプル。次に、あなたが望む出力を使用することができます

関連する問題