我正在尝试使用变量将字符串传递给python中的serial.Serial函数。以下是我想要的方式:
port = serial.Serial("/dev/ttyAMA0", baudrate=9600,bytesize=serial.SEVENBITS,stopbits=serial.STOPBITS_ONE,parity=serial.PARITY_EVEN,timeout=3.0)
但是,如果我尝试将字符串放入变量中,然后使用变量调用该函数,则会出现错误。
serialString = '"/dev/ttyAMA0",baudrate=9600,bytesize=serial.SEVENBITS,stopbits=serial.STOPBITS_ONE,parity=serial.PARITY_EVEN,timeout=3.0'
port = serial.Serial(serialString)
这是错误:
回溯(最近一次呼叫最后):文件" ./ cncserver.py",第34行, 在 port = serial.Serial(serialString)File" /usr/lib/python2.7/dist-packages/serial/serialutil.py" ;,第260行,in 的初始化 self.open()File" /usr/lib/python2.7/dist-packages/serial/serialposix.py" ;,第276行,in 打开 提升SerialException("无法打开端口%s:%s"%(self._port,msg))serial.serialutil.SerialException:无法打开端口 "的/ dev / ttyAMA0",波特率= 9600,bytesize = serial.SEVENBITS,停止位= serial.STOPBITS_ONE,奇偶校验= serial.PARITY_EVEN,超时= 3.0: [Errno 2]没有这样的文件或目录: '"的/ dev / ttyAMA0",波特率= 9600,bytesize = serial.SEVENBITS,停止位= serial.STOPBITS_ONE,奇偶校验= serial.PARITY_EVEN,超时= 3.0'
我猜测它与字符串中的文件路径没有被正确引用有关但我已经花了足够的时间试图解决它,请问有人帮我吗?< / p>
谢谢, 罗恩
这是我修改后的代码:
#parameter settings of the serial port on the PI must match the control
serialPort = "/dev/ttyAMA0"
serialBaudRate = 9600
serialByteSize = serial.SEVENBITS
serialStopBits = serial.STOPBITS_ONE
serialParity = serial.PARITY_EVEN
serialTimeout = 3.0
port = serial.Serial(serialPort,serialBaudRate,serialByteSize,serialStopBits,serialParity,serialTimeout)
以下是新错误:
回溯(最近一次呼叫最后一次):文件&#34; ./ cncserver.py&#34;,第39行, 在 port = serial.Serial(serialPort,serialBaudRate,serialByteSize,serialStopBits,serialParity,serialTimeout) File&#34; /usr/lib/python2.7/dist-packages/serial/serialutil.py" ;, line 250,在 init 中 self.parity = parity文件&#34; /usr/lib/python2.7/dist-packages/serial/serialutil.py" ;,第344行,在 setParity 如果奇偶校验不在self.PARITIES:引发ValueError(&#34;不是有效的奇偶校验:%r&#34;%(奇偶校验))ValueError:不是有效的奇偶校验:1
答案 0 :(得分:3)
port = serial.Serial("/dev/ttyAMA0", baudrate=9600,bytesize=serial.SEVENBITS,stopbits=serial.STOPBITS_ONE,parity=serial.PARITY_EVEN,timeout=3.0)
与
不同port = serial.Serial('"/dev/ttyAMA0",baudrate=9600,bytesize=serial.SEVENBITS,stopbits=serial.STOPBITS_ONE,parity=serial.PARITY_EVEN,timeout=3.0')
这不是字符串,而是作为key_pair值传递的函数参数。
"/dev/ttyAMA0", baudrate=9600,bytesize=serial.SEVENBITS,stopbits=serial.STOPBITS_ONE,parity=serial.PARITY_EVEN,timeout=3.0
向函数发送6个不同的参数: -
的/ dev / ttyAMA0
波特率为9600
bytesize as serial.SEVENBITS
stopbits as serial.STOPBITS_ONE
parity as serial.PARITY_EVEN
超时为3.0
'"/dev/ttyAMA0",baudrate=9600,bytesize=serial.SEVENBITS,stopbits=serial.STOPBITS_ONE,parity=serial.PARITY_EVEN,timeout=3.0'
只发送一个参数
至于你想要做什么,
初始化:
args = ("/dev/ttyAMA0",)
kwargs= {'baudrate':9600,'bytesize':serial.SEVENBITS,'stopbits':serial.STOPBITS_ONE,'parity':serial.PARITY_EVEN,'timeout':3.0}
并在任何地方打电话给他们
port = serial.Serial(*args, **kwargs)