我可以在Python中将所有输出重定向到/dev/null吗?

3 投票
2 回答
3099 浏览
提问于 2025-04-17 05:33

我正在写一个Python脚本,这个脚本会创建一个子进程。父进程应该能够输出一些信息,比如Started child at xxxxx,但是子进程的输出需要被重定向到/dev/null。我该怎么在Python中做到这一点呢?

2 个回答

0

如果有人想找一种跨平台的方法,把输出重定向到一个叫做null file的地方,我们可以用os.devnull这个属性来指定我们想把输出重定向到null file

import sys
import os

stderr = sys.stderr
stdout = sys.stdout

# print(os.devnull)

print("Hell o World!")

sys.stdout = open(os.devnull, 'w')
sys.stderr = open(os.devnull, 'w')

print("This is redirected to null")

输出:

Hell o World!

首先,我们为默认的标准输出标准错误创建一个备份:

stderr = sys.stderr
stdout = sys.stdout

然后我们把消息显示在默认的标准输出上:

print("Hell o World!")

接下来,我们把输出消息和错误消息重定向到null file

sys.stdout = open(os.devnull, 'w')
sys.stderr = open(os.devnull, 'w')

这里我们在验证输出是否已经重定向到null file

print("This is redirected to null")

如果你想找找null file具体在哪里,可能会得到不同的结果,因为这取决于运行Python程序的操作系统

print(os.devnull)

如果你想把输出和错误消息重置回默认的标准输出标准错误,可以使用这种方法:

import sys
import os

stderr = sys.stderr
stdout = sys.stdout

sys.stdout = open(os.devnull, 'w')
sys.stderr = open(os.devnull, 'w')

print("This is redirected to null.")

sys.stderr = stderr
sys.stdout = stdout

print("This is redirected to the standard output.")

输出:

This is redirected to the standard output.
13

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常需要将它们转换成一种程序可以处理的格式。

比如说,如果你从一个表单获取用户的名字,这个名字可能是字符串格式的。为了在程序中使用这个名字,我们可能需要把它放到一个变量里,这样我们就可以在后面的代码中随时调用它。

另外,有些数据可能需要经过一些处理,比如计算、排序或者过滤。处理完的数据可以帮助我们做出更好的决策,或者让程序的功能更加丰富。

总之,数据处理是编程中非常重要的一部分,它帮助我们将原始数据转化为有用的信息。

import sys
old_stdout, old_stderr = sys.stdout, sys.stderr
sys.stdout = open('/dev/null', 'w')
sys.stderr = open('/dev/null', 'w')

撰写回答