【发布时间】:2016-10-25 07:34:15
【问题描述】:
我在工作中遇到了问题。在这里。
我有几个脚本(主要是 shell 脚本)要执行,我想编写一个 python 脚本来自动运行它们。其中一个 shell 脚本在执行期间需要交互式输入。困扰我的是我找不到读取它的输入提示的方法,所以我无法决定输入什么来继续。
我将问题简化为:
有一个名为mediator.py 的脚本,它在里面运行greeter.sh。 mediator 接受greeter 的输入提示并将其打印给用户,然后获取用户的输入并将其传递给greeter。从用户的角度来看,mediator 的行为必须与 greeter 完全相同。
这里是greeter.sh:
#! /bin/bash
echo "Please enter your name: " # <- I want 'mediator.py' to read this prompt and show it to me, and then get what I input, then pass my input to 'greeter.sh'
read name
echo "Hello, " $name
我想按以下顺序执行此操作:
- 用户(就是我)运行
mediator.py -
mediator在内部运行greeter.sh -
mediator得到greeter的输入提示,并输出到屏幕上。(此时greeter正在等待用户输入。这是我坚持的主要问题) - 用户输入一个字符串(例如,'Mike'),
mediator获取字符串'Mike'并传送给greeter -
greeter获得名称“Mike”,并打印问候语 -
mediator获取问候语,并将其输出到屏幕上。
我搜索了一些解决方案,并决定在subprocess模块中使用Popen函数,子进程的stdout指向PIPE,它是这样的:
sb = subprocess.Popen(['sh', 'greeter.sh'], stdout = subprocess.PIPE, stdin = stdout, stderr = stdout)
但我无法解决上述第 3 步中的主要问题。任何人都可以给我一些帮助的建议吗?非常感谢!
【问题讨论】:
标签: python shell subprocess nonblocking python-interactive