我想使用 python 代码中的
supervisorctl
操作一个进程,以获取状态并像这样进行条件分支:
import subprocess
status = subprocess.run(["sudo", "supervisorctl", "status", "my_process"])
if status == "STOPPED":
# Do something
else:
# Do another thing
但这行不通。
subprocess.run
返回 CompletedProcess(args=['sudo', 'supervisorctl', 'status', 'my_status'], returncode=0)
。响应没有状态是什么。我认为您需要使用
subprocess.check_output()
将输出返回给您,而不仅仅是返回代码。
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
运行带有参数的命令,并将其输出作为字节字符串返回。
subprocess
文档描述了.run()
如何返回一个CompletedProcess
对象。
从那里你可以检索状态之类的东西:
status = subprocess.run(["sudo", "supervisorctl", "status", "my_process"])
if status.returncode == 0:
# success
else:
# something went wrong
supervisorctl不返回status 0是正常的, 所以最好使用subprocess.run,但是要添加capture_output参数来捕获输出... 这是我的代码 -
output = subprocess.run(['supervisorctl', 'status'], capture_output=True).stdout
# output is: b'webserver STOPPED May 01 03:55 PM\n'