如何在Python中防止子进程输出到stdout?

问题描述 投票:0回答:1

我需要使用 Python 运行一个进程并终止它,然后在它挂起时重新运行它。我不希望第二个进程污染我的 shell 标准输出。但无论我做什么,子进程的输出都会写入外壳。顺便说一句,我正在使用 Linux。

这就是我所拥有的:

server_command = "./start.sh >/dev/null 2>&1"
server_cwd = "/home/mehran/Project"

process = subprocess.Popen(server_command,
                           shell=False,
                           cwd=server_cwd,
                           stdout=subprocess.DEVNULL,
                           stderr=subprocess.DEVNULL)

正如我所提到的,这仍然会将子进程的输出打印到 shell。我还尝试了所有我能想到的其他组合(没有

>/dev/null 2>&1
,然后没有
subprocess.DEVNULL

python shell subprocess stdout
1个回答
0
投票

仅使用

subprocess.DEVNULL
就足够了,但使用
PIPE

几乎总是更好
p = subprocess.Pppen(
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE, stderr=subprocess.PIPE,
    # text=True,  # don't need to .encode()
)
out, err = p.communicate()  # opportunity to pass stdin
if p.returncode != 0:
    # handle failure, maybe now display out, err
# now use out for purposes
© www.soinside.com 2019 - 2024. All rights reserved.