2013-09-04 17 views
6

Ho una situazione in cui ho bisogno che uno script python sia in esecuzione in un ciclo continuo e devo passare i parametri da un altro script che verrà eseguito quando un l'azione si verificaCome ottenere uno script python per ascoltare gli input da un altro script

Il secondo script verrà attivato da un sito Web che utilizza cgi, questo funziona correttamente. Il ciclo continuo dovrebbe contenere i parametri letti dallo script cgi (e quindi inviare informazioni tramite una porta seriale).

Per il problema specifico non è possibile avere lo script cgi che invia i dati via seriale direttamente ogni volta che viene eseguito il reset della porta seriale.

Non riesco a trovare alcuna informazione su questo tipo di installazione. Ci sono metodi o librerie che potrei esaminare per questo o modi migliori per affrontarlo?

+0

Hai mai pensato di creare il secondo script con una bottiglia o qualcosa di simile e accettare i parametri come parametri http get? – JoelWilson

risposta

8

Vorrei utilizzare una connessione socket. In sostanza si sta scrivendo un semplice server che richiede solo una connessione alla volta

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(("localhost", 9988)) 
s.listen(1) 

while True: 
    conn, addr = s.accept() 
    data = conn.recv(1024) 
    conn.close() 
    my_function_that_handles_data(data) 

s.accept() è una chiamata di blocco. Aspetta una connessione. Quindi fai una lettura sulla connessione. In questo caso stiamo assumendo che la lunghezza dei parametri sia solo di 1024 byte. Quindi facciamo qualcosa con i dati che abbiamo ricevuto dal socket e aspettiamo un'altra connessione.

Il cliente potrebbe essere la seguente:

import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("localhost", 9988)) 
s.sendall('My parameters that I want to share with the server') 
s.close() 

La cosa bella di questo è che in futuro, se il client e il server non sono più in esecuzione sulla stessa macchina, allora si tratta di una semplice questione di cambiare "localhost" a l'indirizzo IP effettivo o il nome di dominio che stai per colpire.

+0

Sembra che potrebbe essere perfetto, mi sono imbattuto in prese prima, ma non ero sicuro di come avrebbero funzionato per questo o di come usarli, grazie per il semplice esempio. Lo proveremo più tardi. – Ger

+0

Gli zoccoli sono abbastanza flessibili. Esistono molti tipi diversi di socket che puoi creare. Non devono essere attraverso la rete. Se stai usando Linux puoi creare un socket di dominio che è appena instradato tramite il kernel. – aychedee

+0

Ha funzionato a meraviglia, grazie! – Ger

1

Il concetto generale di ciò che viene descritto si chiama Inter-Process Communication (Python IPC).

In python questo può essere fatto da sockets e signals.

Ci sono anche interfacce di livello superiore costruite sopra/usando i socket; asyncore e asynchat.