【问题标题】:Python wrapper for Python programPython 程序的 Python 包装器
【发布时间】:2014-02-10 10:45:21
【问题描述】:

我正在寻找一种方法来创建一个包装另一个 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")

程序2的示例输入:

asdf
ghjkl
1234

program2 的示例输出:

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



我考虑过使用的东西:

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



我希望得到什么

我最终希望得到一个 Python 程序,该程序每次运行时都会将另一个连续的输入插入到包装程序中的中断点,并将输出通过管道传输到标准输出中。如果这样做更容易,那就太好了。

【问题讨论】:

  • 我不太确定,但你可能想看看gevent 模块。
  • 你为什么不能import其他脚本中的组件?
  • “暂停”第二个程序是什么意思?
  • @Blender 我无法确定脚本的格式或执行代码的顺序。我需要按照包装程序中 raw_input()s 指定的顺序专门通过输入管道
  • @JanneKarila 我的意思是被包装的程序停止执行并等待来自包装程序的输入继续。

标签: python python-2.7


【解决方案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 是一个阻塞调用,直到它接收到一行输入。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • pexpect 是我想要的。 gevent 看起来很适合连续输入的想法
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多