使用子进程从Python调用R,想要保留STDOUT并忽略STDERR

时间:2015-04-20 19:56:12

标签: python subprocess stdout popen stderr

所以Python中的这段代码我目前在变量“run”中返回我的STDOUT:

run = subprocess.check_output(['Rscript','runData.R',meth,expr,norm])

但它仍然在屏幕上打印所有这些丑陋的文本,因为必须在R等中安装软件包等等。所以我希望将其忽略并发送到STDERR。有没有办法做到这一点?这就是我目前正在研究的内容,但它似乎不起作用。同样,我只是想让它忽略除了结果之外它在屏幕上打印的内容。所以我想忽略STDERR并保持STDOUT。谢谢!

run = subprocess.Popen(['Rscript','runData.R',meth,expr,norm],shell=False,   stdout=subprocess.PIPE,stderr=devnull)

2 个答案:

答案 0 :(得分:1)

我一发布这个就解决了我的问题!我很抱歉!这就是它的工作原理:

 output = subprocess.Popen(['Rscript','runData.R',meth,expr,norm],shell=False, stdout=subprocess.PIPE,stderr=subprocess.PIPE)

 final = output.stdout.read()

这忽略了命令行中的杂乱内容并将结果保存到最终。

感谢大家的快速回复!

答案 1 :(得分:1)

为避免完全管道stderr,您可以将其重定向到os.devnull

  

os.devnull

     

空设备的文件路径。例如:POSIX为“/ dev / null”,Windows为“nul”。也可以通过os.path。

获得
import os
import subprocess
with open(os.devnull) as devnull:
    subprocess.Popen([cmd arg], stdout=subprocess.PIPE, stderr=devnull)