Какова цель `tempfile.NamedTeilitaryFile` при создании клиента с использованием zmq? - PullRequest
0 голосов
/ 06 декабря 2018

Я читаю исходный код 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)

Мои заблуждения:

  1. Какова цель sys.stderr = tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.stderr')?Почему клиент должен быть создан в сопровождении этих строк sys.stderr?

  2. Почему 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.

Почему мой код не работает?

...