【问题标题】:Automate a Terminal Program?自动化终端程序?
【发布时间】:2012-11-12 14:32:30
【问题描述】:

我有一个 python 脚本,在运行它之前会询问您需要设置的几个用户键入的选项。我想知道是否可以制作一个 bash 脚本来自动填充 bash 脚本中为我定义的选项?

【问题讨论】:

  • 我会努力的。我现在正在使用移动设备,不过感谢您的提示。

标签: python


【解决方案1】:

试试这样的:

echo -n 'First answer\nSecond answer\n' | python script.py

对于要求更高的任务,请使用expect

【讨论】:

  • 我回家试试,谢谢!只是从长远来看,有人知道该命令的批处理版本吗?
  • 只要接收脚本不能从标准输入读取就行不通。命令行参数和管道是两个不同的概念。见stackoverflow.com/a/1504919/1107807。但你可以这样做:python script $(echo -n 'First answer\nSecond answer\n')
  • 有一个纯python期望实现:pexpect.
  • 如果此方法失败,您也可以使用Expect-Lite
【解决方案2】:

我认为您正在寻找的是 Expect-lite (http://expect-lite.sourceforge.net)。它是一种简单的脚本语言,可以轻松地自动将响应传递给 cli 程序。它的重量很轻,可以让你编写一个脚本来运行你的 python 程序。

例如,如果您想通过 ssh 自动使用密码登录,您可以编写如下代码:

>ssh root@host-021
<assword:
>>secret_password
# issue a command once logged in
>ls
>exit

但是输出可能有点混乱。相反,您可以使用 Python 模块 pexpect (http://www.noah.org/wiki/pexpect),它可以让您编写一个简单的 Python 脚本来运行其他 Python 脚本,同时自动响应提示。

上面的相同示例将变为:

child = pexpect.spawn('ssh root@host-021')
child.expect('assword:')
child.sendline('secret_password')
child.sendline('ls')
child.sendline('exit')

这反过来会屏蔽输出,但您可以设置一个日志文件来记录输出。你也可以像child.logfile = sys.stdout一样将日志文件设置为STDOUT。

您可以用它做更多可能对您有用的事情,并在文档中显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 2011-07-22
    • 2015-12-10
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多