Seite 1 von 1

Anfängerproblem mit pyserial in Skript

Verfasst: Samstag 19. Januar 2013, 11:50
von HWe
Hallo,
ich hab erst gestern mit Python angefangen und heute schon das erste Problemchen :

Öffnen des seriellen Ports "/dev/USB0" klappt über die - wie heisst es doch gleich ? - interaktive Kommandozeile, oder so:

Code: Alles auswählen

>>> device = '/dev/ttyUSB0' 
>>> baudrate = '19200'
>>> time_out = 2         
>>> port= serial.Serial(device,baudrate,timeout=time_out)
>>> port.isOpen()
True
>>> port.close()
aber in folgendem Skript kommmt immer "Failed to open..." (auch als root) - Warum ?

Code: Alles auswählen

#! /usr/bin/python
### import modules
import serial
import time
### variables and constants
device = '/dev/ttyUSB0' #default is 9200,8,N,1,timeout=0
baudrate = '19200'
time_out = 2 		#timeout is necessary to avoid deadlock of the script while receiving
### main
port= serial.Serial(device,baudrate,timeout=time_out)
time.sleep(1)	

if port.isOpen() != 'true' :
   print "Failed to open ", device
else :
   print "Opened ", device," succesfully !"
Wo steckt hier mein Anfängerfehler ?

Re: Anfängerproblem mit pyserial in Skript

Verfasst: Samstag 19. Januar 2013, 12:14
von pillmuncher

Code: Alles auswählen

$ python
Python 2.6.8 (unknown, Jun  9 2012, 11:30:32)
[GCC 4.5.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> True == 'true'
False

Re: Anfängerproblem mit pyserial in Skript

Verfasst: Samstag 19. Januar 2013, 12:27
von HWe
pillmuncher hat geschrieben:

Code: Alles auswählen

$ python
Python 2.6.8 (unknown, Jun  9 2012, 11:30:32)
[GCC 4.5.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> True == 'true'
False

Äähm, ja, danke!
Dann mach ich halt

Code: Alles auswählen

if port.isOpen() != 1 :
oder

Code: Alles auswählen

if port.isOpen() != True :
dann gehts !

Beginnersdank!

Re: Anfängerproblem mit pyserial in Skript

Verfasst: Samstag 19. Januar 2013, 12:30
von DasIch
Vergleiche gegen Booleans sind schlechter Stil, das lässt sich wesentlich eleganter lösen.

Code: Alles auswählen

if not port.isOpen():

Re: Anfängerproblem mit pyserial in Skript

Verfasst: Samstag 19. Januar 2013, 12:31
von BlackJack
@HWe: Ergänzend zu pillmuncher:

Code: Alles auswählen

In [1]: type(True)
Out[1]: bool

In [2]: type('true')
Out[2]: str

In [3]: True == 'True'
Out[3]: False
Nicht das jemand am Ende denkt man hätte bloss auf Gross- und Kleinschreibung achten müssen. :-)

Letztendlich braucht man dort aber gar keinen Vergleich, denn Vergleiche mit literalen Wahrheitswerten sind hier unnötig und damit mindestens schlechter Stil. Das `isOpen()` gibt ja schon einen Wahrheitswert zurück. Wenn man auf das Gegenteil davon testen möchte, sollte man ``not`` verwenden. Letztendlich hätte ich hier wohl einfach auf `isOpen()` getestet und den Inhalt der beiden Zweige von dem ``if``/``else`` vertauscht.