gpt4 book ai didi

python - 获取尚未在 Python 中返回的(OS)命令的输出

转载 作者:行者123 更新时间:2023-11-28 19:21:39 28 4
gpt4 key购买 nike

要获得命令的输出,我们可以这样做

os.popen("ls").read()

但假设我有一个命令,我不想等待它返回。其实我是想让它一直运行下去,偶尔吐出一些输出。(例如,java PrintEvery5)(假设 PrintEvery5 每 5 秒打印一行)。

如何订阅进程/线程并获取它的输出?

我已经尝试了以下方法,但似乎没有用。

### file: deqthread.py
import threading, os, subprocess

class DeqThread(threading.Thread):
def __init__(self):
super(DeqThread, self).__init__()
self.f=os.popen("java PrintEvery5")

def run(self):
print("in run")

def readResult(self):
return self.f.read()


thread1 = DeqThread()
thread1.start()

while True:

print(thread1.readResult())

运行 python deqthread.py,我没有看到任何输出。整个东西就卡在那里。

当我尝试这个时,我可以看到输出。 (即,它不断打印到控制台),

$python <ENTER>
>>> import os
>>> os.system("java PrintEvery5")

那么我需要在我的 deqthread.py 文件中更改什么才能从我的命令中获取输出?

最佳答案

您是否尝试过使用 subprocess 模块中的 check_output 方法?它允许您运行带参数的命令并将其输出作为字节字符串返回。

import subprocess

output = subprocess.check_output(["echo", "Hello Java!"])
print output

所以 __init__ 可以变成:

def __init__(self):
super(DeqThread, self).__init__()

readResult 可以变成:

def readResult(self):
def readResult(self):
output = subprocess.check_output(["echo", "Hello Java!"])
return output

请参阅此处的文档: https://docs.python.org/2/library/subprocess.html

关于python - 获取尚未在 Python 中返回的(OS)命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23645609/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com