使两个脚本进行通信

时间:2010-11-13 11:12:12

标签: python communication

我必须制作两个程序(例如“脚本A”(.py)和“脚本B”(。exe))进行通信。 两个程序都处于无限循环:脚本A需要写入脚本B的stdin,然后读取脚本B的stdout,然后再次写入等。脚本B我无法更改。

这两个文件都在我的硬盘上,所以我必须有一个比网络更好的解决方法。但是,我可以使用脚本A编写文件。 这不是课程作业,我正在为游戏编写GUI,我有一些AI的预编程。 我曾想过管道(python scripta.py | scriptb.exe),但似乎需要脚本A才能在脚本B执行之前完成。然后,因为我从未使用过滚边,我可能错过了一些明显的东西。

我更希望所需的工具是标准库的一部分,但如果它们不是,那就太糟糕了。

解决方案必须适用于Linux和Windows。 你们有没有人能指出我正确的方向? 谢谢你的时间。

2 个答案:

答案 0 :(得分:6)

如果使用子进程模块从“脚本A”中启动“脚本B”,您将能够直接与其stdin和stdout进行交互。例如:

from subprocess import Popen, PIPE

prog = Popen("scriptA.exe", shell=True, stdin=PIPE, stdout=PIPE)

prog.stdin.write("This will go to script A\n")
print prog.stdout.read()

prog.wait() # Wait for scriptA to finish

请注意,因为对read的调用会阻塞,这意味着如果脚本没有任何要打印的内容,则调用将会挂起,直到调用为止。避免这种情况的最简单方法是使用线程。

答案 1 :(得分:0)

您可能有兴趣看一下Interprocess Communication and Networking