我像这样运行罐子:
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)
但是我不懂线程和子进程,也不知道怎么做。
而不是
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())