所以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)
答案 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)