Связь сокетов между QTScript и Python

Я пытаюсь передать внешний скрипт Python с программой C++, которая позволяет использовать qt-скрипты. Цель состоит в том, чтобы частично контролировать программу C++ (используя ее API-функции qtscript) из кода Python.

Я знаю, как создать базовый сервер/клиент сокетов в python:

#Server code

import socket

server = socket.socket()
server.bind (("localhost", 8080))
server.listen(10)
client, client_adress = server.accept()

while True:
    message= cliente.recv(1024)
    if message== "quit":
        break
    print "Received:", message
    client.send(message)

print "Goodby"
cliente.close()
server.close()

...

#client code

import socket
client = socket.socket()
client.connect(("localhost", 8080))

while True:
    message = raw_input(">" )
    client.send(message)
    if message == "quit":
        break

print "Goodby"

Но я не могу найти много информации о том, как это сделать в qtscript (без опыта работы с javascript), я знаю, что есть Класс QTcpSocket, но я не совсем уверен, с чего начать, чтобы получить фрагмент, подобный тем, которые у меня есть на Python. Вот это вопрос, но не полезные подсказки для меня... и вот это примеры, но я не могу заставить его работать.

Что лучше, клиент или сервер на Python? Могу ли я найти пример qtscript?

Заранее спасибо!


person hasielhassan    schedule 22.04.2016    source источник


Ответы (1)


Похоже, у вас есть интерпретатор QtScript (Javascript), работающий внутри вашей программы Qt C++. И вы хотите, чтобы клиент Python мог отправлять ему команды. Самый простой (но не самый безопасный!) способ сделать это — подключить клиент Python либо с помощью базового TCP, либо с помощью HTTP POST, отправить исполняемую программу Javascript и заставить программу C++ выполнить ее внутри.

Таким образом, сторона Python довольно тривиальна. Для стороны C++ вы должны сначала создать QTcpServer, а затем, когда он получит данные, прочитать их все и передать строку в QScriptEngine::evaluate(). О том, как использовать QTcpServer, см. здесь: http://doc.qt.io/qt-5/qtnetwork-fortuneserver-example.html

person John Zwinck    schedule 22.04.2016
comment
Спасибо Джон!! Вы правы, я начинаю тестировать некоторые вещи и создавать прототип: github .com/hasielhassan/Python2QtScript-SocketServer/tree/ Но я борюсь с типом данных QByteArray и проверяю отправляемые команды. Я думаю, что мне нужно преобразовать его в строку, но я нашел его более сложным, как я и ожидал, соответствующие строки следующие: github.com/hasielhassan/Python2QtScript-SocketServer/blob/ Есть ли у вас какие-либо идеи о том, как это сделать? Есть ли другой способ проверить данные, чтобы реагировать соответствующим образом? - person hasielhassan; 22.04.2016
comment
@hasielhassan: Пожалуйста. Я не уверен, что вы сейчас спрашиваете. Если вы застряли, вам следует рассмотреть возможность публикации нового вопроса с этими деталями. - person John Zwinck; 23.04.2016
comment
Еще раз привет, в конце я нашел способ получить значения QByteArray в строку, может быть, это не лучший, но рабочий... github.com/hasielhassan/Python2QtScript-SocketServer/commit/ - person hasielhassan; 23.04.2016