2012-02-09 41 views
0

我想解析一些數據並用python製作圖表,並且出現一個奇怪的問題。撥打os.system()的電話似乎在某處丟失。os.system()在python中失敗

以下三行:

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 

但在中間的唯一顯著命令似乎會被丟棄。該腳本仍然運行echo和版本檢查,並自行運行gnuplot(gnuplot外殼),但是沒有警告,也沒有gnuplot的文件輸出。

爲什麼這個命令刪除,爲什麼完全安靜?

如果有幫助,調用應該啓動gnuplot,它應該打開幾個文件(指令和其中指示的數據文件)並寫出到SVG文件。我試圖刪除目標文件,所以它不會覆蓋,但無濟於事。

這是在Ubuntu Natty x86_64虛擬機上使用2.6.38-8虛擬內核的python 3.2。

+0

檢查os的返回碼。系統。它是0(成功)? – 2012-02-09 17:19:23

回答

2

所以,原來的問題是我沒有提到。之前在腳本test.gnuplot和test.data被編寫,但我忽略調用文件對象'close(),並驗證它們被關閉(仍然不知道如何做最後一部分,所以現在它循環了一下)。因此就出現了一些意想不到的行爲,對那裏造成的gnuplot來看到兩個不可讀文件,不採取任何行動,沒有產生輸出,並返回0

我想沒有人得點這一個。

編輯:我終於與strace幫助了它。不知道我在learned how to use it之前是如何做事的。

1

是否將警告打印到stderr,並且以某種方式被攔截?

嘗試使用

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

並檢查輸出使用子過程代替,例如。

(或普蘭subprocess.call起來可能比使用os.system更好)

+1

僅供參考,子流程文檔:http://docs.python.org/py3k/library/subprocess – 2012-02-09 17:27:07

1

不使用os.system。使用subprocess module

os.system documentation說:

該子模塊提供了產卵 新工藝和檢索其結果更加強大的工具;使用該模塊是 最好使用此功能。

試試這個:

subprocess.check_call(['gnuplot', 'test.gnuplot'])