我在我的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的所有错误 开始"为空?
答案 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.dup
和os.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)
这根本不涉及贝壳;你的命令似乎不需要一个。