如何将错误redirect到/ dev / null?

我在我的python脚本中有这个乐趣:

def start_pushdata_server(Logger): Logger.write_event("Starting pushdata Server..", "INFO") retcode, stdout, stderr = run_shell(create_shell_command("pushdata-server start")) 

我们希望将标准错误从pushdata-server二进制redirect到/ dev / null。

所以我们这样编辑它:

 def start_pushdata_server(Logger): Logger.write_event("Starting pushdata Server..", "INFO") retcode, stdout, stderr = run_shell(create_shell_command("pushdata-server start 2>/dev/null")) 

但在Python代码中添加2>/dev/null是无效的。

那么我们如何在Python代码中将所有错误从“pushdata-server start”发送到null?

添加到在Unix或Linux中运行的Python脚本的代码将把所有stderr输出重定向到/ dev / null

 import os # if you have not already done this fd = os.open('/dev/null',os.O_WRONLY) os.dup2(fd,2) 

如果您只想为您的部分代码执行此操作:

 import os # if you have not already done this fd = os.open('/dev/null',os.O_WRONLY) savefd = os.dup(2) os.dup2(fd,2) 

你的代码中有stderr重定向的部分在这里。 然后将stderr恢复到原来的位置:

 os.dup2(savefd,2) 

如果你想这样做的标准输出,在os.dupos.dup2调用( dup2保持为dup2 )中使用1而不是2,并在做任何一组os.之前刷新标准输出os. 调用。 如果这些名称与您的代码冲突,请使用不同的名称而不是fd和/或savefd

避免run_shell(create_shell_command(...))部分的复杂性,这个部分不是很好的定义,试试

 import subprocess subprocess.run(['pushdata-server', 'start'], stderr=subprocess.DEVNULL) 

这根本不涉及壳; 你的命令似乎不需要一个。