expect:让两个python脚本进行通信

问题描述 投票:0回答:1

我想让两个脚本通过交换消息进行通信。由于其他限制,我必须使用 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 应该打印出来(或以其他方式捕获响应),但这并没有发生

python automation expect pexpect
1个回答
0
投票

您的困难在于 > 提示的

缓冲

让我们稍微修改一下脚本,让它们看起来像这样。 并假设用户输入“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"
© www.soinside.com 2019 - 2024. All rights reserved.