【问题标题】:Press enter as command input [closed]按回车作为命令输入[关闭]
【发布时间】:2013-03-26 14:04:05
【问题描述】:

我有一个应用程序的安装程序。它有用于 *nix/windows 操作系统的 .sh 和 .bat。 在脚本中它会做一些事情并挂在那里,等待一些其他事情完成,然后需要在该命令窗口中按 Enter,脚本将继续。

我想用 python 做所有的事情。我知道 subprocess.open 可以调用脚本,但我不确定如何执行“按 Enter”的操作..

任何输入都会被应用..

【问题讨论】:

  • 确切地说,您是如何调用安装程序的?
  • 我试图使用类似“subprocess.Popen('sh abc.sh',shell=True,stdout=subprocess.PIPE)”的东西。而且我不知道按 Enter 键下一步该怎么做..
  • 由 pExpect 实现.. 谢谢大家..

标签: python subprocess


【解决方案1】:

一种使用方式是使用raw_input方法!

# Code
print "Please press ENTER to continue!"
raw_input()
# more code

【讨论】:

  • 感谢您的回复 Aneesh。但我想做的是一个自动化安装工具,它会自动完成所有的事情。那么到底有没有不涉及人操作的呢?
【解决方案2】:

您需要在安装程序的标准输入上提供一个换行符。

一种方式:

subprocess.Popen('sh abc.sh < a_file_that_you_prepared.txt',
                 shell=True,
                 stdout=subprocess.PIPE)

另一个,大致相当于第一个:

input_file = open('a_file_that_you_prepared.txt', 'r')
subprocess.Popen('sh abc.sh',
                 shell=True,
                 stdout=subprocess.PIPE,
                 stdin=input_file)
input_file.close()

另一种方法——可能有效,也可能无效:

subprocess.Popen('sh abc.sh < /dev/null',
                 shell=True,
                 stdout=subprocess.PIPE)

第三种方式——很容易导致你的程序和安装程序之间出现死锁:

x = subprocess.Popen('sh abc.sh',
                 shell=True,
                 stdout=subprocess.PIPE,
                 stdin=subprocess.PIPE)

...

x.stdin.write('\n')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2019-02-05
    • 2019-02-27
    • 2014-03-21
    • 2020-10-13
    • 2013-12-24
    • 2013-11-28
    相关资源
    最近更新 更多