我在Python中使用Paramiko模块ssh到另一台机器并执行命令。
该命令调用一个连续产生输出的程序。我的目标是运行这样的东西:
stdin, stdout, stderr = ssh.exec_command(mycommand)
附加约束,在X秒后“我的命令”终止,就像按 Ctrl + C 并将输出返回到stdout。
有没有办法(或另类方式)呢?
答案 0 :(得分:1)
如果远程主机正在运行Unix,您可以传递一个shell脚本来执行此操作mycommand
:
stdin, stdout, stderr = client.exec_command(
"""
# simple command that prints nonstop output; & runs it in background
python -c '
import sys
import time
while 1:
print time.time()
sys.stdout.flush()
time.sleep(0.1)
' &
KILLPID=$!; # save PID of background process
sleep 2; # or however many seconds you'd like to sleep
kill $KILLPID
""")
运行时,会以100毫秒的间隔打印当前时间,持续2秒:
... 1388989588.39
... 1388989588.49
... 1388989588.59
... 1388989588.69
... 1388989588.79
... 1388989588.89
... 1388989588.99
... 1388989589.1
... 1388989589.2
... 1388989589.3
... 1388989589.4
... 1388989589.5
... 1388989589.6
... 1388989589.71
... 1388989589.81
... 1388989589.91
... 1388989590.01
... 1388989590.11
... 1388989590.21
... 1388989590.32
然后优雅地停止。