如何在远程计算机上执行进程并在退出之前查看标准输出? 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
?每行之后的输出将很有用。
答案 0 :(得分:0)
ssh vector /home/comperem/myProc.py
以这种方式通过ssh调用远程程序时,默认情况下,远程进程在没有TTY的情况下运行。相反,它通过一组管道连接到ssh服务器。您的python程序可能正在缓冲其输出,因为它正在写入管道而不是TTY。
最简单的解决方法是让程序刷新其输出。 This question讨论了如何获取python脚本刷新标准输出。我不是python程序员,但是看起来应该可以:
while elapsedTime<10000:
time.sleep(2)
elapsedTime = time.time() - tStart
print('elapsed time: {0:6.2f}(s)'.format(elapsedTime), flush=True)
^^^^^^^^^^^^
The other question讨论了其他方法。
答案 1 :(得分:0)
您可以使用daggy解决问题:
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
daggy -o my_proc_folder config.yaml
tail -f my_proc_folder/*