在后台运行 shell 命令并使用 python 将 stdout 通过管道传输到日志文件

xet*_*a11 5 python shell subprocess popen

我有一个.war文件想通过 python 启动。我希望它在后台运行,这样我的终端中就不会出现日志消息。我也希望将实际的日志输出放入日志文件中。这是我用来解决这个问题的Python代码。

我还没有运气。该进程未分离,因为执行脚本后无法运行其他 shell 命令。日志文件已创建,但没有附加日志输出。

编辑:为了让事情更清楚。我想增强这个脚本以最终运行多个java进程。因此,这个 python 脚本应该生成那些 java 进程并最终终止。如何准确实现包括将标准输出重定向到文件的功能?

#!/usr/bin/env python3
import subprocess
import re

platformDir = "./platform/"

fe = "frontend-webapp-0.5.0.war"
logfile = open("frontend-log", 'w')

process = subprocess.Popen(['java', '-jar', platformDir + fe], 
stdout=subprocess.PIPE)

for line in process.stdout:
        logFile.write(line)
Run Code Online (Sandbox Code Playgroud)

xet*_*a11 0

实际上,我只需要向 stdout 提供文件句柄,例如stdout=logFile. 通过 stdout 进行 for 循环的解决方案会让我一直处于 python 脚本进程中

import sys
from subprocess import Popen, PIPE, STDOUT

platformDir = "./platform/"

fe = "frontend-webapp-0.5.0.war"

logfile = open("frontend-log", 'ab')

p = Popen(['java', '-jar', platformDir + fe], stdout=logfile, stderr=STDOUT, bufsize=1)
Run Code Online (Sandbox Code Playgroud)