Python 子进程在stdout和os.devnull之间进行选择
对于一个项目,我想写一个代码,我想在我的项目的各个部分重用。我需要执行一个命令,并希望能够在控制台中打印或静音命令之间进行选择。 我已经想到了这一点,但我不确定它是否正常,以及“with”是否以这种方式正确工作:Python 子进程在stdout和os.devnull之间进行选择,python,subprocess,stdout,Python,Subprocess,Stdout,对于一个项目,我想写一个代码,我想在我的项目的各个部分重用。我需要执行一个命令,并希望能够在控制台中打印或静音命令之间进行选择。 我已经想到了这一点,但我不确定它是否正常,以及“with”是否以这种方式正确工作: import os import sys import subprocess def run_subprocess(cmd, display_output : bool=False): if display_output: stdout = sys.stdou
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
这样可以吗?我应该换点什么吗?
谢谢 我发现了一些我正在使用的更干净的东西,仍然不确定这是否是“良好实践”,但对于我的应用程序来说似乎还不错
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
将sentinel用于/dev/null,或将默认的None
用于stdout:
导入子流程
def run_子流程(cmd,显示_输出:bool=False):
stdout=None如果显示\u输出else subprocess.DEVNULL
返回subprocess.call([cmd],shell=True,stdout=stdout)
使用这些工具可以使
子流程
以独立于系统的方式正确处理这两个目标。它似乎工作得很好!更加优雅:)谢谢!(不再需要sys和os,也不用函数中的“if”而不用“of”)@th0mash感谢您指出了拼写错误和死代码,两者都删除了。