子进程在 stdout 和 os.devnull 之间选择
subprocess choose between stdout and os.devnull
对于一个项目,我想编写一个代码,我想在我的项目的各个部分重复使用。我需要执行一个命令,并希望能够在控制台打印或静音命令之间进行选择。
我想到了这个,但我不确定它是否可以,以及“with”是否以这种方式正确工作:
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
这样可以吗?我应该改变什么吗?
谢谢!
我发现了一些我正在使用的更清洁的东西,但仍然不确定它是否 'good practice' 但它似乎对我的应用程序来说还不错
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
为 /dev/null 使用标记 subprocess.DEVNULL
或为标准输出使用默认的 None
:
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
以 system-independent 的方式正确处理两个目标。
对于一个项目,我想编写一个代码,我想在我的项目的各个部分重复使用。我需要执行一个命令,并希望能够在控制台打印或静音命令之间进行选择。 我想到了这个,但我不确定它是否可以,以及“with”是否以这种方式正确工作:
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
这样可以吗?我应该改变什么吗? 谢谢!
我发现了一些我正在使用的更清洁的东西,但仍然不确定它是否 'good practice' 但它似乎对我的应用程序来说还不错
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
为 /dev/null 使用标记 subprocess.DEVNULL
或为标准输出使用默认的 None
:
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
以 system-independent 的方式正确处理两个目标。