gpt4 book ai didi

python - 如何检测使用 Paramiko invoke_shell 执行的命令是否已完成

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:09 27 4
gpt4 key购买 nike

我正在尝试使用 Paramiko 执行备份。当备份发生时,我让脚本休眠 240 秒,希望它能完成,但有时这可能需要比这更长的时间。无论如何,我可以使用循环每 20 秒检查一次,看看是否存在诸如“备份完成”之类的关键字作为输出变量。

import datetime, time
from time import sleep
from Tkinter import *
import paramiko
from paramiko_expect import SSHClientInteraction
def backup():
prompt = 'root@servername user'
try:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

client.connect(hostname=server, username=user, password=pass)

interact = SSHClientInteraction(client, timeout=10, display=True)


except paramiko.AuthenticationException:
print("Authentication failed, please verify your credentials: %s")
except paramiko.SSHException as sshException:
print("Unable to establish SSH connection: %s" % sshException)
except paramiko.BadHostKeyException as badHostKeyException:
print("Unable to verify server's host key: %s" % badHostKeyException)
except Exception as e:
print(e.args)

interact.send('su')
interact.expect("Password:")


interact.send("supassword")
interact.expect(prompt)


interact.send("who")
interact.expect(prompt)

cmd_output_who = interact.current_output_clean
print cmd_output_who

最佳答案

SSHClient.invoke_shell用于实现交互式终端 session (就像您正在实现自己的 SSH 终端客户端一样),而不是用于自动执行命令。终端是一个带有输入和输出的黑盒子。它没有任何 API 来执行命令并等待其完成。

使用SSHClient.exec_command执行命令和 Channel.recv_exit_statusChannel.exit_status_ready等待它完成。
请参阅Wait until task is completed on Remote Machine through Python .

关于python - 如何检测使用 Paramiko invoke_shell 执行的命令是否已完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707630/

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