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