我正在尝试解析一些数据并使用python制作图表,并且会出现一个奇怪的问题。对os.system()
的调用似乎在某个地方迷失了。
以下三行:
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 shell)也可以工作,但没有警告,也没有来自gnuplot的文件输出。
为什么这个命令被删除,以及为什么完全默默地?
如果它有用,调用应该启动gnuplot,它应该打开几个文件(指令和其中指示的数据文件)并写出到SVG文件。我尝试删除目标文件,因此不必覆盖,但无济于事。
这是使用2.6.38-8虚拟内核的Ubuntu Natty x86_64虚拟机上的python 3.2。
答案 0 :(得分:2)
所以,事实证明这个问题是我没有提到的。在脚本test.gnuplot和test.data的早期编写,但我忽略了调用文件对象'close()
并验证它们已关闭(仍然不知道如何做最后一部分所以现在它循环一点)。所以有一些意外的行为导致gnuplot看到两个不可读的文件,不采取任何行动,不产生输出,并返回0.
我猜这个人没有得分。
编辑:我终于在strace
的帮助下弄明白了。我learned how to use it之前不知道我是怎么做的。
答案 1 :(得分:1)
警告是否打印到stderr,并以某种方式被截获?
尝试使用子流程,例如使用
subprocess.check_output(cmd, stderr=subprocess.STDOUT)
并检查输出。
(或plaing subprocess.call可能比os.system更好)
答案 2 :(得分:1)
不要使用os.system
。使用subprocess
module。
子进程模块为产卵提供了更强大的功能 新流程并检索其结果;使用该模块是 最好使用这个功能。
试试这个:
subprocess.check_call(['gnuplot', 'test.gnuplot'])