Я пытаюсь получить данные из порожденного процесса python, который прослушивает сокет домена unix, но каждый раз, когда я запускаю приложение узла, оно через некоторое время закрывается. Я попытался выполнить сценарий python без узла, и он работает правильно. Я также прочитал документацию по узлу https://nodejs.org/api/child_process.html и несколько постов, чтобы увидеть, что я делаю что-то не так, но все же у меня нет никакой подсказки. Сценарий узла, который я использовал, приведен ниже:
gateway. js
const { spawn } = require("child_process");
console.log("Spawing process");
let listener = spawn('python', ['./app_connection/dc_socket.py']);
listener.on('error', (err) => {
console.log(err);
});
listener.stdout.on('data', (data) => {
console.log(data.toString('utf8'));
});
, а сценарий python:
dc_socket.py
import socket
import logging
import os
import sys
REL_DEBUG_PATH = '../logs'
DEBUG_FILE_NAME = 'dc_socket.log'
BASE_PATH = os.path.dirname(__file__)
DEBUG_PATH = os.path.join(BASE_PATH, REL_DEBUG_PATH, DEBUG_FILE_NAME)
socket_logger = logging.getLogger(__name__)
debug_handler = logging.FileHandler(DEBUG_PATH)
debug_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
debug_handler.setFormatter(debug_format)
socket_logger.addHandler(debug_handler)
socket_logger.setLevel(logging.DEBUG)
# Datachannel messages will be intercepted by UV4L and will be published
# on the unix socket defined below
socket_path = '/tmp/uv4l.socket'
socket_logger.debug("Socket path: {}".format(socket_path))
try:
os.unlink(socket_path)
except OSError:
if os.path.exists(socket_path):
socket_logger.error("Could not create socket.")
raise
MESSAGE_SIZE = 1024 # bytes
# But we must create the socket in order to allow UV4L to send messages
socket_logger.debug("Initializing socket.")
with socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET) as dc_socket:
dc_socket.bind(socket_path)
dc_socket.listen(1)
socket_logger.debug("Listening on {}".format(socket_path))
connection, address = dc_socket.accept()
with connection:
socket_logger.debug("Connected with {}".format(address))
while True:
message = connection.recv(MESSAGE_SIZE)
if not message:
break
print(message) # Send message to parent process through stdout
socket_logger.debug("Message: {}".format(message.decode('utf-8')))
sys.stdout.flush()
Когда я запускаю приложение с node gateway.js
, я получаю следующее:
$ node gateway.js
Spawing process
$
И файл журнала для сценария python выглядит следующим образом:
dc_socket.log
2020-04-16 21:25:28,229 - __main__ - DEBUG - socket path: /tmp/uv4l.socket
2020-04-16 21:25:28,257 - __main__ - DEBUG - Initializing socket.
не доходит до установления соединения с сокетом, есть какие-либо подсказки о том, что может происходить? Я потратил довольно много времени, пытаясь понять это, но пока ничего.