2012-02-09 15 views
0

私はいくつかのデータを解析して、Pythonでグラフを作成しようとしています。 os.system()への電話はどこかで失われているようです。os.system()がPythonで失敗しています

次の3行:

os.system('echo foo bar') 
os.system('gnuplot test.gnuplot') 
os.system('gnuplot --version') 

は印刷する必要があります:

foo bar 
Warning: empty x range [2012:2012], adjusting to [1991.88:2032.12] 
gnuplot 4.4 patchlevel 2 

しかし、途中で唯一の重要なコマンドを落とし取得するようです。スクリプトは引き続きエコーとバージョンチェックを実行し、それ自体でgnuplot(gnuplotシェル)を実行しても動作しますが、警告とgnuplotからのファイル出力はありません。

なぜこのコマンドがドロップされたのですか?

gnuplotを起動すると、いくつかのファイル(指示とその中に示されているデータファイル)が開き、SVGファイルに書き出されるはずです。私は上書きする必要はないので、目的のファイルを削除しようとしましたが、無駄です。

これは、2.6.38-8仮想カーネルを持つUbuntu Natty x86_64仮想マシン上のPython 3.2です。

+0

osの戻りコードを確認します。システム。それは0(成功)ですか? –

答えて

2

だから、それは問題は、私が言及しなかった何かであったが。スクリプトの前半にtest.gnuplotとtest.dataが書かれていましたが、ファイルオブジェクト 'close()を呼び出して閉じていることを確認しませんでした(まだ最後の部分をどうやって行うのかまだ分かりません。 )。そこで、gnuplotには2つの読み込み不可能なファイルが表示され、何も処理せず、出力が生成されず、0を返すという予期しない動作が発生しました。

誰もこのポイントを取得しないと思います。

編集:私はついにstraceの助けを借りてそれを理解しました。どのように私は前に、私はlearned how to use itをやったか分からない。

1

警告はstderrに出力されていますが、何とか傍受されますか?

subprocess.check_output(cmd, stderr=subprocess.STDOUT) 

使用して出力をチェック例えば、代わりにサブプロセスを使用してみてください。

(またはsubprocess.callがos.systemより良い仕事かもしれませんplaing)

+1

参考までに、サブプロセスのドキュメント:http://docs.python.org/py3k/library/subprocess –

1

os.systemを使用しないでください。 subprocess moduleを使用してください。

os.system documentationは言う:

subprocessモジュールは 新しいプロセスを生成し、その結果を取得するためのより強力な機能を提供します。そのモジュールを使用することは、この機能を使用することよりも好ましい です。

これを試してみてください:

subprocess.check_call(['gnuplot', 'test.gnuplot']) 
関連する問題