当前位置: 首页 > 面试题库 >

连续从paramiko ssh exec_command获取输出

裴永年
2023-03-14
问题内容

我正在使用paramiko在远程计算机上通过ssh执行长时间运行的python脚本。就像魅力一样,到目前为止没有问题。

不幸的是,仅在脚本完成后才显示stdout(分别为stderr)!但是,由于执行时间长,我更希望 在打印每行时输出新行 ,而不是在以后输出。

remote = paramiko.SSHClient()
remote.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote.connect("host", username="uname", password="pwd")

# myScript produces continuous output, that I want to capture as it appears    
stdin, stdout, stderr = remote.exec_command("python myScript.py")
stdin.close()
for line in stdout.read().splitlines():
    print(line)

如何做到这一点?
注意:当然可以将输出通过管道传递到文件,并通过另一个ssh会话“减少”该文件,但这非常丑陋,我需要一种更清洁的,理想的pythonic解决方案:)


问题答案:

如read( [size]
)文档中
指定的那样,如果您未指定a
size,它将一直读取到EOF为止,这会使脚本等到命令结束后再返回read()并打印任何输出。

检查以下答案:如何循环直到Python中的EOF?有关如何用尽类文件对象的示例,以及如何执行“虽然不是EOF”。



 类似资料:
  • 问题内容: (.issues[] | {key, status: .fields.status.name, assignee: .fields.assignee.emailAddress}) 输出: 但是我需要解析每一行,但是就密钥组而言,很难确定哪个受让人对应哪个密钥。使用jq可以使一束成行吗? 预期产量: 要么 问题答案: 您可能需要的是 使用上面发布的输出,可以进行进一步处理: 给予 或者您

  • 我在桌子下面。“月份”列表示每个客户已下订单的数量。我想计算连续0的最大数目。 因此结果表将为: 我知道有一个窗口函数可以处理行的连续0,但不确定如何处理列。

  • 问题内容: 要获取有关媒体文件的大量信息,可以做 它会输出很多行,特别是一行 我只想输出,所以我尝试 但是它可以打印所有内容,而不仅仅是长度。 甚至输出所有内容。 如何获得持续时间长度? 问题答案: ffmpeg正在将该信息写入,而不是。尝试这个: 注意重定向到: 编辑: 您的陈述也不起作用。尝试这个:

  • 有人问我一个关于求两个数之间的公约数的问题。我能够使用“埃拉托色尼筛”找出逻辑方法,我正在运行我的代码。但是我的代码给出了一个意想不到的输出,它能够计算出no。指两个数之间的公约数。对于第一个输入,但对于其余的输入,它以某种方式继续与前一个值“内部循环j”,在该值处,它在第一个测试用例中停止;对于其他测试用例。 逻辑方法-->如果一个素数不。是给定两个NO的因子。然后,我们将检查每一个素数的倍数。

  • 我想在提取一些数据时使用外部工具(循环通过行)。为此,我首先使用了Runtime.getRuntime()。exec()执行它。但后来我的提取变得很慢。所以我在寻找一种可能性,在循环的每个实例中,使用shell的同一个实例来执行外部工具。 我发现,我应该使用ProcessBuilder。但是现在还不行。 这是我测试执行的代码(已经从论坛中的答案输入): 我想在另一个类中调用它,例如 Testcla

  • 问题内容: 我有一个旧版PHP / MySQL应用程序,它调用mysql_connect()。现有的大量下游代码使用此连接直接或通过包装进行调用。 对于我在应用程序上开发的新代码,我想开始使用PDO。 如果我使用相同的主机/用户/密码/ dbname凭据建立PDO连接,那么我是否很幸运,在幕后,PHP将重新使用原始连接?还是PHP将创建与服务器的两个不同的连接(虽然完全可以理解,但这是不希望的)?