我在我的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.dup
和os.dup2
调用( dup2
保持为dup2
)中使用1而不是2,并在做任何一组os.
之前刷新标准输出os.
调用。 如果这些名称与您的代码冲突,请使用不同的名称而不是fd
和/或savefd
。
避免run_shell(create_shell_command(...))
部分的复杂性,这个部分不是很好的定义,试试
import subprocess subprocess.run(['pushdata-server', 'start'], stderr=subprocess.DEVNULL)
这根本不涉及壳; 你的命令似乎不需要一个。