我想让两个脚本通过交换消息进行通信。由于其他限制,我必须使用 pexpect。在为我的应用程序构建它之前,我正在尝试制作一个最小的工作示例。
我尝试按照在互联网上找到的教程来做一个最小的工作示例。但我失败了,这是我的尝试。第一个脚本是发起通信的脚本:
#script_1.py
import pexpect
p = pexpect.spawn("python /path/to/script/script_2.py")
p.expect(">")
p.sendline(input("Message to the other script: "))
print( p.before )
这是应该接收通信并发送应答的第二个脚本:
#script_2.py
indata = input(">")
print(indata)
如何使用 pexpect 使两个 python 脚本进行通信?
编辑:有人问我为什么说脚本失败,因为没有错误消息。失败的原因是脚本 2 应该回显脚本 1 发送的消息,而脚本 1 应该打印出来(或以其他方式捕获响应),但这并没有发生
您的困难在于 >
提示的
缓冲。
让我们稍微修改一下脚本,让它们看起来像这样。 并假设用户输入“apples”。
script_2.py
print("ok1")
indata = input(">")
print("I like", indata, ".")
print("ok2")
script_1.py
import pexpect
p = pexpect.spawn("python /tmp/k/script_2.py")
p.expect("ok1")
p.sendline(input("Message to the other script: "))
assert p.before == b""
assert p.after == b"ok1"
p.expect("ok2")
assert p.before == b"\r\n>apples\r\nI like apples .\r\n"
assert p.after == b"ok2"
assert p.buffer == b"\r\n"