【发布时间】:2022-08-18 23:31:31
【问题描述】:
问题
如何使用 pexpect 获得具有多行输出的命令的输出?
例子
这段代码有效,尽管输出被分成了一行:
child = pexpect.spawn(\'ping -c 3 1.1.1.1\')
child.expect(pexpect.EOF)
print(child.before)
但是,此代码不起作用:
child = pexpect.spawn(\'hostname\')
child.expect(pexpect.EOF)
print(child.before)
child.seldline(\'ping -c 3 1.1.1.1\')
child.expect(pexpect.EOF)
print(child.before)
我将如何让第二个代码工作?
背景
我有需要运行才能连接的命令(在此处替换为主机名),然后是输出多行的命令(在此处替换为 ping),我似乎无法从中获取输出。如果我查找 EOF 以外的任何字符串,我会收到 EOF 异常...
如果您需要证明,我实际运行的命令在这里:
这个其他问题的答案可能已被弃用,因为这部分代码完全复制只是一遍又一遍地输出b\'\'。
-
您没有包含多行的命令。您有多个单独的命令。您需要在此处对
pexpect.spawn使用两个单独的调用。一旦您expectEOF,该命令就完成了。你不能用它做更多的事情。 -
这不是我可以分开的命令。它是一个 ssh、一个 lxc-attach 和另一个 ssh。然后我运行一个类似 ping 的命令。
-
您是否在第一个 ssh 会话中运行
lxc-attach、ssh和ping?如果是这样,那么在结束会话之前您不会获得 EOF。您需要等待触发下一个操作的字符串,通常是 shell 提示符。 -
我可以很好地运行这些命令,然后运行像
hostname这样的简单命令,但如果我执行多行操作(如ping),它就不起作用了。