使用 icommandlib 或 pexpect 交互式运行命令

但是,如果你要运行的命令需要

  • 它提示用户进行响应(是或否 / 密码 / 等等)。
  • 它在终端窗口上“绘制” - 就像“top”。
  • 你想在它运行时与进程交互并做其他事情(例如,等待数据库服务预热,然后继续)。

那么你需要一个交互式库。

Commandlib 可以用这种方式为另外两个库调用并创建交互式进程对象 - ICommandLibpexpect

下面的两个示例实际上不是交互式的,但它们演示了如何使用 pexpect 和 icommandlib。

outputtext

#!/bin/bash
echo hello $1

from commandlib import Command

icommandlib

process = Command("./outputtext", "mark").interactive().run()
process.wait_until_output_contains("mark")
process.wait_for_successful_exit()

pexpect

from pexpect import EOF
process = Command("./outputtext", "mark").pexpect()
process.expect("mark")
process.expect(EOF)
process.close()

可执行规范

文档自动从 icommand-or-pexpect.story storytests 生成。