2010-06-24 5 views
6

Devo leggere un flusso che viene inviato da un dispositivo fatto in casa sulla porta seriale. Il problema è che dovrebbe essere distribuito su una macchina in cui non ho accesso per installare qualcosa di nuovo, il che significa che devo usare le librerie standard Python per fare questo. È possibile, e se è così, come posso gestirlo.Come leggere dalla porta seriale in python senza utilizzare le API esterne?

Se risulta quasi impossibile, dovrò chiedere a qualcuno di installare pySerial, ma lo apprezzerei molto se si potesse fare senza questo.

Se ci sono differenze in Linux/Windows, questo è su una macchina Windows, ma apprezzerei davvero una soluzione multipiattaforma.

risposta

7

Su sistemi operativi di tipo Unix, la porta seriale funziona come un file e basta aprirlo e leggere o scrivere byte. Ci sono alcune chiamate extra che puoi fare per impostare la velocità di trasmissione e quant'altro, ma questo è essenzialmente tutto ciò che c'è.

Su Windows, si apre la porta seriale come un file, ma è necessario utilizzare alcuni metodi particolari di accesso che sono leggermente diversi da quello che Python utilizza per i file normali. Sfortunatamente è difficile accedere con successo a una porta seriale di Windows usando solo le librerie native Python.

La libreria pyserial fornisce un modo uniforme e multipiattaforma di accedere alle porte seriali. Si basa su ctypes, che si trova nella libreria standard da Python 2.5, quindi potresti essere in grado di includere pyserial con l'applicazione e usarlo.

+0

Puoi descrivere un po 'di più quali sono le differenze, o forse ancora meglio darmi un suggerimento su dove guardare. Ho provato a google, ma non ho trovato nulla di diverso da pySerial. – martiert

+0

Una delle differenze è che su Windows, è necessario leggere e scrivere il dispositivo della porta seriale utilizzando le funzioni API di Win32 'ReadFile' e' WriteFile', in modalità * I/O sovrapposta *. Farlo normalmente richiede solitamente la creazione di thread separati per gestire la lettura e la scrittura. Poiché 'pyserial' fa tutto questo ed è open source, puoi guardare dentro per vedere cosa fa. La tua ultima risorsa può essere "fare esattamente ciò che fa" il pyserial ". –

0

Si dice che non si ha accesso per installare nulla di nuovo. Suppongo che si tratti di un problema di autorizzazioni, ad esempio non è possibile ottenere un accesso di amministrazione elevato e l'installazione di pip/conda non riesce.

Se si dispone di un qualsiasi tipo di accesso utente normale alla macchina (che presumo sia necessario, direttamente o indirettamente, per inserire lo script nella macchina in primo luogo), è possibile utilizzare un ambiente virtuale per installare i moduli di cui hai bisogno. Questo può essere fatto da un normale account utente.

Solo Google per "python virtual environment" e troverai tutto ciò di cui hai bisogno.

Se si utilizza Anaconda Python è leggermente diverso. Google per "ambiente condominio".

Se non è ancora possibile ottenere un prompt dei comandi sul PC host - ad es. puoi comprimere i file e assegnarli a qualcun altro da distribuire: è possibile utilizzare per utilizzare un ambiente virtuale. Dovrai semplicemente comprimere l'ambiente virtuale insieme al tuo script. Con Anaconda puoi organizzare la creazione dell'ambiente nella stessa directory del tuo progetto usando l'opzione -p. Presumo che Pipenv abbia qualcosa di simile.

Oppure è possibile comprimere tutto con pyinstaller, che crea un runtime stand-alone con tutti i moduli inclusi.