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

标签 python shell subprocess popen

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

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

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

#!/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)

最佳答案

以下是使用 Python 3 进行尝试的方法:

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=PIPE, stderr=STDOUT, bufsize=1)

for line in p.stdout: 
    sys.stdout.buffer.write(line) 
    logfile.write(line)

关于python - 在后台运行 shell 命令并使用 python 将 stdout 通过管道传输到日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48694812/

相关文章:

python - 在 python 中绘制轴 - matplotlib

c++ - 子进程通信。 C++

python - Pandas:如何删除具有重复复合键的行,同时保持缺失值分布在重复项之间?

ubuntu 18.04 LTS/usr/lib/fresh install 中的 python 目录

arrays - 来自用户输入的 Bash 数组键

bash - 从 Shell 脚本监控 URL 请求

Python Popen 困难 : File not found

python - Subprocess.call ffmpeg 制作空文件

python - 开始日期的滚动平均值发生在之前

java - Java/shell 中的 Base64 编码输出不同