【问题标题】:python script to respond to subprocess prompts响应子进程提示的python脚本
【发布时间】:2012-07-29 16:42:57
【问题描述】:

我已经查看并尝试了许多不同形式的打开子流程并在流程打开后对出现的提示编写响应。调用“chpass”进程并相应地回答提示的最基本方法是什么,这是在 Mac OS X 服务器上。

每种打开进程的方式都会导致脚本不响应提示。

我尝试了以下变化:

pc = Popen(['chpass',name],stdin=PIPE)
pc.communicate(oldpassword)
pc.write(oldpassword)
pc.stdin.write(oldpassword)

可能我根本不知道如何正确使用它,也许有一个非常基本的教程,其中有一个运行诸如 chpass bash 命令之类的进程并能够向其写入命令的示例。

【问题讨论】:

  • 我投了反对票,但没有解释原因,谈一谈就成功了——让我们在这里努力提高工作效率。我真的坐了两个多小时来解决这个问题,搜索了将近六个选项,但仍然没有找到任何地方。

标签: python macos subprocess popen


【解决方案1】:

您需要的是pexpect 模块。

使用示例:

 child = pexpect.spawn('scp foo myname@host.example.com:.')
 child.expect ('Password:')
 child.sendline (mypassword)

当然,您必须写下您运行的命令的名称,而不是scp

【讨论】:

  • 我试过 pexpect 没有好的结果。脚本最终处于等待输入的暂停状态,我最终控制-C'ing它
  • 这意味着您指定了错误的expect 字符串。在我的示例中,它是Password:。请检查字符串。
  • 提示显示:'Changing account information for username.\nPassword for username:' .. 我添加了换行符,你可以想象它会是什么样子。被这个难住了:-\
  • 你给child.expect添加了什么?
  • 两个句子的变体,既可以作为一个期望的方法调用,也可以作为两个单独的调用。我也只是自己尝试了第二句话。
猜你喜欢
  • 2017-10-30
  • 2018-05-12
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多