如何将错误重定向到/ dev / null?

时间:2017-11-17 09:10:45

标签: linux python

我在我的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 binary重定向到/ 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的所有错误 开始"为空?

2 个答案:

答案 0 :(得分:1)

此代码添加到在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)

如果你想为stdout执行此操作,请在os.dupos.dup2调用中使用1而不是2(dup2保持为dup2)并在执行之前刷新stdout任何一组os.来电。如果这些名称与您的代码冲突,请使用不同的名称而不是fd和/或savefd

答案 1 :(得分:1)

避免run_shell(create_shell_command(...))部分的复杂性,无论如何都要定义明确,请尝试

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

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