从服务器实时读取终端输出

时间:2017-01-28 10:49:30

标签: python ubuntu terminal subprocess

我正在尝试从我的服务器上的相机处理图像,并在我的本地计算机上实时处理后获取信息。我可以在我的服务器上获得必要的信息作为终端输出,但我不能将这些信息放在本地机器上的python代码中,直到我的服务器程序运行。我试过这段代码:

cmd="sshpass -p 'pass' ssh -Y user@ip -t 'process_image; bash -l'"
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=1)
for line in iter(p.stdout.readline, b''):
    print(line)
    p.stdout.close()
    p.wait()

但它不起作用 - 看起来这段代码只是暂停了我的程序。我试图将输出写入文件而不是从本地机器读取文件,但它会扭曲我的数据。如何实时读取服务器的终端输出?

1 个答案:

答案 0 :(得分:0)

由于输出将使用bufsize=1进行行缓冲,因此您可以这样做:

cmd="sshpass -p 'pass' ssh -Y user@ip -t 'process_image; bash -l'"
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=1)
for line in p.stdout:
    print(line)
    .....

当然,这假设您的命令为您提供了您期望的输出。