Связь между двумя скриптами Python, в которых первый постоянно работает - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть 2 сценария Python. Для простоты

1-й сценарий:

Это простой бесконечный цикл while, в котором переменная 'x' увеличивается на 1 (этот сценарий всегда выполняется)

Теперь, что мне нужно, 2-й сценарий, когда я вызываю этот сценарий, он должен дать мне текущее значение x

Я читал о многопроцессорной обработке, конвейере и очереди, но не смог реализовать его

РЕДАКТИРОВАТЬ:

Я пробовал решение сокета, и я получаю ошибки

Клиентская сторона

import serial
import time
from multiprocessing import Process
import sys
import socket
s=socket.socket()
port=43470
s.connect(('127.0.0.1',port))
sertx = serial.Serial('COM4', 115200)

while 1:
    for i in range(4):
        msg = str(i+1)
        # print('sending: ',msg.encode())

        msgstat = 'A' + msg
        #print(msgstat)
        #print(type(msgstat))
        tx_t = time.time()

        sertx.write(msg.encode())
        tx_t=str(tx_t)
        s.send(tx_t.encode())
        s.close()
        time.sleep(0.001)

Ошибка - Файл«. \ tx.py», строка 23, в s.send (tx_t.encode ()) OSError: [WinError 10038] Была предпринята попытка выполнить операцию с чем-то, что не является сокетом PS C: \ Users \ ambuj \ Documents \ PythonСкрипты>

Сервер

import socket

s = socket.socket() 

port = 43470 # make this any random port

s.bind(('127.0.0.1', port))

s.listen(5) # put the socket into listen mode

while True:

    c, addr = s.accept()

    data = c.recv(1024).decode("utf-8") # This data is received from the client script
    print(data)

    c.close() 

1 Ответ

1 голос
/ 02 ноября 2019

Этого можно добиться, используя связь через сокет. Просто создайте такой серверный скрипт, который будет прослушивать любые входящие данные на конкретный порт ...

import socket

s = socket.socket() 

port = 43470 # make this any random port

s.bind(('127.0.0.1', port))

s.listen(5) # put the socket into listen mode

while True:

    c, addr = s.accept()

    data = c.recv(1024).decode("utf-8") # This data is received from the client script

    c.close() 

Теперь в вашем клиентском скрипте вы должны подключиться к сокету, который связан с этим портом. Сделайте такой скрипт клиента ...

import socket

s = socket.socket()          
port = 43470 # Use the same port number here as you did in the server script.
s.connect(('127.0.0.1', port)) 
s.send(b"This data will be received by the server!")
s.close()  

Вы можете сделать и обратное. Таким образом, сервер сможет отправлять данные клиентскому скрипту. Это двусторонняя связь.

Помните: это всего лишь простая демонстрация того, как все работает. В действительности, модификация очень нужна.

...