Python程序的Python包装器

时间:2014-02-10 10:45:21

标签: python python-2.7

我正在寻找一种方法来创建一个包装另一个Python程序的Python程序。这就是我的意思:

while (otherProgram is waiting for raw_input):
    send some text to the other program

我必须在两个单独的计划中完成这项工作。


这是另一个例子:

program1.py

text = raw_input()
print("You entered " + text)
text2 = raw_input()
print("Your second input was " + text2)
text3 = raw_input()
print("Your third input was " + text3)

program2.py

# use program1.py somehow
while program1_is_waiting_for_input:
    send_to_program1("prefix " + raw_input() + " suffix")

示例输入到program2:

asdf
ghjkl
1234

程序输出的程序2:

You entered prefix asdf suffix
Your second input was prefix ghjkl suffix
Your third input was prefix 1234 suffix



我考虑过的事情:

  • 我不认为evalexec或类似的东西会起作用,因为我不知道要执行多少代码。
  • 如果我正确地管道输出,子进程模块可能会工作,但是在等待输入时我可以“暂停”第二个程序吗?
  • 也许我应该尝试多线程的非包装程序,但我不知道我会怎么做呢
  • 下载一个开源的python解释器并尝试解决这个问题(对于一个相对简单的问题来说似乎过于困难)



我希望最终得到什么

我最终希望最终得到一个Python程序,每次运行时,在它离开的位置将另一个连续输入插入到包装程序中,并将输出传递给stdout。如果这样做更容易,那就太棒了。

2 个答案:

答案 0 :(得分:1)

查看子流程模块或https://pypi.python.org/pypi/pexpect-u/

答案 1 :(得分:1)

以下是使用子进程运行子进程的示例。

import subprocess

program1 = subprocess.Popen("program1.py", stdin=subprocess.PIPE, stdout=subprocess.PIPE)
while program1.poll() == None:
    cmd_to_send = "prefix " + raw_input() + " suffix"
    program1.stdin.write(cmd_to_send + "\n")

您的子进程将等待输入,因为raw_input是一个阻塞调用,直到它收到一行输入。