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

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

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用于实现交互式终端会话(例如,如果您正在实现自己的SSH终端客户端),而不是用于自动执行命令。终端是带有输入和输出的黑匣子。它没有任何API可以执行命令并等待其完成。

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

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python:集群作业管理 - python

我在具有两个阶段的计算群集(Slurm)上运行python脚本,它们是顺序的。我编写了两个python脚本,一个用于阶段1,另一个用于阶段2。每天早上,我检查所有第1阶段的工作是否都以视觉方式完成。只有这样,我才开始第二阶段。通过在单个python脚本中组合所有阶段和作业管理,是否有一种更优雅/自动化的方法?我如何知道工作是否完成?工作流程类似于以下内容:w…

Python:在不更改段落顺序的情况下在文件的每个段落中反向单词? - python

我想通过反转text_in.txt文件中的单词来生成text_out.txt文件,如下所示:text_in.txt具有两段,如下所示:Hello world, I am Here. I am eighteen years old. text_out.txt应该是这样的:Here. am I world, Hello old. years eighteen a…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…