我必须使用数据从多个文件制作图表。我已经找到了运行简单命令的方法
xmgrace -batch batch.bfile -nosafe -hardcopy
其中batch.bfile是一个文本文件,带有grace命令来打印我想要的图形。我已经手动尝试过,它完美无缺。要使用多个文件执行此操作,我只需编辑batch.bfile中的一个参数,并在每次进行更改时运行相同的命令。
我已经编写了一个python代码,它编辑batch.bfile并通过for循环遍历所有数据文件。在每个循环步骤中,我想直接在命令行中运行上述命令。
搜索了一下后,我找到了两个解决方案,一个是os.system(),另一个是subprocess.Popen(),我只能通过编写来使subprocess.Popen()工作而不会出现任何错误:
subprocess.Popen("xmgrace -batch batch.bfile -nosafe -hardcopy", shell=True)
问题是,这在实践中没有做任何事情,即它与在命令行中直接运行命令不同。我已经尝试编写batch.bfile的完整目录但没有改变。
我正在使用Python 2.7和Mac OS 10.7
答案 0 :(得分:0)
答案 1 :(得分:0)
当使用Popen时,你可以将应用程序的输出捕获到stdout到stderr并在你的应用程序中打印 - 这样你就可以看到发生了什么:
from subprocess import Popen, PIPE
ps = Popen(reportParameters,bufsize=512, stdout = PIPE, stderr = PIPE)
if ps:
while 1:
stdout = ps.stdout.readline()
stderr = ps.stderr.readline()
exitcode = ps.poll()
if (not stdout and not stderr) and (exitcode is not None):
break
if stdout:
stdout = stdout[:-1]
print stdout
if stderr:
stderr = stderr[:-1]
print stderr
答案 2 :(得分:0)
您是否已使用sh检查了从命令行运行xmgrace? (即调用/ bin / sh,然后运行xmgrace ...这应该是Popen在设置shell = true时使用的shell)。
另一个解决方案是创建一个shell脚本(创建一个类似myscript.sh的文件,并从终端运行chmod + x)。在脚本中调用xmgrace:
#!/bin/bash
xmgrace -batch batch.bfile -nosafe -hardcopy
然后你可以测试myscript.sh是否有效,它应该拾取你的配置文件中可能与python不同的任何环境变量。如果这样可行,你可以从python的subprocess.Popen('myscript.sh')调用脚本。您可以通过运行以下命令来检查python中为子进程设置的环境变量:
import os
os.environ