我需要使用 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
)
仅使用
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