1

我正在编写一个调用命令行(例如 python 本身)的 Python 代码,该命令将打开它自己的 shell。Python 如何控制这个 shell?

import subprocess
subprocess.call(['./testprg'])

# testprg will open its own shell 
# so the code below will not work
subprocess.call(['i 2'])

testprg 是另一个打开 shell 提示符的程序。输入“i 2”将触发值为 2 的“插入”命令。

4

2 回答 2

2

它不能。subprocess不与交互式 shell 交互。

您需要stdin=PIPE在第一个子进程中使用'i 2\n'对该管道的写入。

如果您想与交互式程序交互,请考虑使用pexpect 。它可能会让你的生活更轻松。

于 2012-10-02T10:43:47.730 回答
0

看看subprocess.Popen.communicate()。如果它只是接收一些行并将命令发送到另一个进程,它应该是你正在寻找的。

一些例子:

pout, perr = Popen([tools['PASSWD'], username], stdin=PIPE, stdout=PIPE,
        stderr=PIPE).communicate("%s\n%s\n" % (password, password))
于 2012-10-02T10:50:33.780 回答