python - 使用 zmq 创建客户端时,`tempfile.NamedTemporaryFile` 的目的是什么?
问题描述
我正在阅读AMP的源代码,tempfile.NamedTemporaryFile
当代码使用zmq
.
这是代码如何工作的草图:
服务器:
import pexpect
import sys
import zmq
from socket import gethostname
python = sys.executable
context = zmq.Context()
socket = context.socket(zmq.REP)
port = socket.bind_to_random_port('tcp://*')
serverhostname = gethostname()
serversocket = '%s:%s' % (serverhostname, port)
workercommand = "%s -m %s %s" % (python, <python_module>, serversocket)
child = pexpect.spawn(workercommand)
child.expect('<amp-connect>')
通过运行<python-module>
,将创建一个客户端
客户:
import zmq
import sys
import tempfile
print('<amp-connect>')
sys.stderr = tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.stderr')
sys.stderr.write('initiated\n')
sys.stderr.flush()
context = zmq.Context()
sys.stderr.write('context started\n')
sys.stderr.flush()
socket = context.socket(zmq.REQ)
sys.stderr.write('socket started\n')
sys.stderr.flush()
socket.connect('tcp://%s' % hostsocket)
我的困惑:
目的是
sys.stderr = tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.stderr')
什么?为什么客户端必须伴随着那些行创建sys.stderr
?为什么
child.expect('<amp-connect>')
在代码中起作用?
我写了一个类似的代码。
import pexpect
import sys
import test
python = sys.executable
workercommand = "%s -m %s" % (python, test)
child = pexpect.spawn(workercommand)
child.expect('<ahh>')
print(child.before)
其中test.py
只是
print(100)
print('<ahh>')
但是,我收到错误:
pexpect.exceptions.EOF: End Of File (EOF). Empty string style platform.
为什么我的代码不起作用?
解决方案
推荐阅读
- android - autoSize TextView 不起作用(使用 androidx 定位 v.24)
- javascript - 当我已经将数组(参数)值传递给另一个进行修改时,为什么它会更改函数中的数组(参数)值?
- mongodb - 如何使用 go mongo-driver 在 MongoDB 中将 []byte 存储为二进制文件
- swift - Xcode 生成的 swiftinterface 文件的兼容性问题
- javascript - 从 Shopify Webhook 验证 HMAC(使用 Hapijs)
- flutter - 如何在 Flutter 和 Dart 中使用后期绑定和摇树使图标加载工作
- android - 如何将文本框一一填充?安卓
- c - 创建指向给定地址的指针时出现问题
- email - 带有 sendgrid SMTP 中继“回复电子邮件”的 Postfix
- c# - 为 asp.net 核心 web api 中的方法编写测试