【问题标题】:Send input to command line prompt from Python program从 Python 程序将输入发送到命令行提示符
【发布时间】:2015-01-20 15:25:07
【问题描述】:

我认为这是一个非常简单的问题,但我一直未能找到一个简单的答案。

我正在运行一个终止 AWS 集群(使用 starcluster)的 python 程序。我只是使用子进程从我的 python 程序中调用一个命令,如下所示。

subprocess.call('starcluster terminate cluster', shell=True)

实际命令在很大程度上与我的问题无关,但提供了一些上下文。此命令将开始终止集群,但会在继续之前提示输入是/否,如下所示:

Terminate EBS cluster (y/n)? 

如何在我的 python 程序中自动键入 yes 作为此提示的输入?

【问题讨论】:

标签: python starcluster


【解决方案1】:

虽然possible to do with subprocess alone in somewhat limited way,但我会选择pexpect 进行此类互动,例如:

import pexpect
child = pexpect.spawn('starcluster terminate cluster')
child.expect('Terminate EBS cluster (y/n)?')
child.sendline('y')

【讨论】:

  • 谁先说的? :) 好吧,我删除了我的答案,它没有你的那么详细
  • @mguijarr 这就是为什么花了更长的时间来写:) 谢谢你,先生。
【解决方案2】:

您可以使用 Popen 写入标准输入:

from subprocess import Popen, PIPE
proc = Popen(['starcluster', 'terminate', 'cluster'], stdin=PIPE)
proc.stdin.write("y\r")

【讨论】:

    【解决方案3】:

    检查目标程序的文档可能是最简单的。通常可以设置一个标志来回答所有提示,例如,apt-get -y install

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多