0

如何在远程机器上执行进程并在进程退出之前查看标准输出?ssh 是理想的,但仅在远程命令完成后才报告输出。

像这样的示例 python 脚本:

#!/usr/bin/python3
import time

tStart = time.time()
elapsedTime=0

while elapsedTime<10000:
    time.sleep(2)
    elapsedTime = time.time() - tStart
    print('elapsed time: {0:6.2f}(s)'.format(elapsedTime))

生成指示其进度的输出:

elapsed time:   2.00(s)
elapsed time:   4.00(s)
elapsed time:   6.00(s)
elapsed time:   8.00(s)
...

我想用 ssh 在远程机器上运行它:

ssh vector /home/comperem/myProc.py

此过程不会在几分钟或几小时内结束,我需要在该过程运行时对其进行监控。

在远程进程完成之前,如何获得 ssh 或类似的东西以远程运行命令并stdout在生成时向本地控制台报告?每行之后的输出会很有用。

4

2 回答 2

1
ssh vector /home/comperem/myProc.py

当您以这种方式通过 ssh 调用远程程序时,默认情况下远程进程在没有 TTY 的情况下运行。相反,它通过一组管道连接到 ssh 服务器。您的 python 程序可能正在缓冲其输出,因为它正在写入管道而不是 TTY。

最简单的解决方法是让您的程序刷新其输出。这个问题讨论了如何让 python 脚本刷新标准输出。我不是python程序员,但看起来应该可以:

while elapsedTime<10000:
    time.sleep(2)
    elapsedTime = time.time() - tStart
    print('elapsed time: {0:6.2f}(s)'.format(elapsedTime), flush=True)
                                                         ^^^^^^^^^^^^

另一个问题讨论了其他方法。

于 2018-07-20T15:50:31.937 回答
0

您可以使用daggy解决您的问题:

  1. 像这样创建数据聚合配置config.yaml
aliases:
 - &myProc
   name: myProc
   command: tail -f /home/comperem/myProc.py
   extension: log
 - &auth_ssh
   login: user
   password: password

sources:
   host1:
     type: ssh
     connection:
       *auth_ssh
     host: 192.168.1.10
     commands:
       - *myProc
    hostN:
     type: ssh
     connection:
       *auth_ssh
     host: 192.168.1.N
     commands:
       - *myProc
  1. daggy -o my_proc_folder config.yaml
  2. tail -f my_proc_folder/*
于 2019-08-04T21:50:49.810 回答