如何将子进程数据记录到 tg bot

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

我像这样运行罐子:

import subprocess

subprocess.call([java8_path, '-jar', core_path])

一切正常,jar 文件的日志输出到控制台,但我不能指定一件事

我需要jar文件中的日志不直接输出到控制台,而是由tg bot发送给我

from aiogram import types

async def send_logs(jar_log_text: str):
    await bot.send_message(0000000, jar_log_text)

但是我不懂线程和子进程,也不知道怎么做。

python jar subprocess popen
1个回答
0
投票

而不是

subprocess.call()
使用
subprocess.Popen
PIPE
。此代码段运行您的 jar 文件并将其输出作为字符串连续发送到您的
send_log
函数。

在您的进程处于活动状态之前,

p.poll()
的值为
None
因此 while 循环会在进程结束时停止。

from subprocess import Popen, PIPE
import asyncio

async def run_jar():
    with Popen([java8_path, '-jar', core_path], stdout=PIPE) as p:
        while p.poll() is None:
            text = p.stdout.read1().decode("utf-8")
            await asyncio.gather(send_logs(text))

asyncio.run(run_jar())
© www.soinside.com 2019 - 2024. All rights reserved.