子进程在stdout和os.devnull之间进行选择



对于一个项目,我想编写一段代码,以便在项目的各个部分中重用。我需要执行一个命令,并希望能够在控制台打印或静音命令之间进行选择。我已经想出了这个办法,但我不确定它是否可以;用";正确工作方式:

import os
import sys
import subprocess
def run_subprocess(cmd, display_output : bool=False):
if display_output:
stdout = sys.stdout
else:
stdout = open(os.devnull, "w")

with stdout as s:
exit_code = subprocess.call([cmd], shell=True, stdout=s)
return exit_code

这样做可以吗?我应该换点什么吗?谢谢

将sentinelsubprocess.DEVNULL用于/dev/null或将默认None用于stdout:

import subprocess
def run_subprocess(cmd, display_output: bool = False):
stdout = None if display_output else subprocess.DEVNULL
return subprocess.call([cmd], shell=True, stdout=stdout)

使用这些使得subprocess能够以独立于系统的方式正确地处理这两个目标。

我发现了一些更干净的东西,我正在使用,仍然不确定这是否是"好的做法",但它似乎对我的应用程序来说很好

import os
import subprocess
def run_subprocess(cmd, display_output: bool = False):
with open(os.devnull, "w") as s:
args = {'stdout': s} if display_output else {}
exit_code = subprocess.call([cmd], shell=True, **args)
return exit_code

最新更新