我在使用 Python 并将串行对象作为参数传递给单独的进程时遇到问题。该程序在 Windows 8 中运行,因此不能选择使用全局变量。
from multiprocessing import Queue
from multiprocessing import Process
import os
import serial
from serial.tools import list_ports
from time import sleep
displayMessages = Queue()
modemPort = None
def processDisplayMessages(displayMessages):
while True:
msg = displayMessages.get() #should halt until message in queue
print msg
def processIncomingSerialMessages(modemPort, displayMessages):
while True:
line = modemPort.readline()
displayMessages.put(line)
def main():
print "Serial Send Test"
Process(target=processDisplayMessages, args = (displayMessages,)).start()
modemPort = serial.Serial('COM5', 57600, timeout=0.9) # open first serial port
Process(target=processIncomingSerialMessages, args = (modemPort, displayMessages)).start()
print "Back from launch"
sleep(0.1)
if __name__ == '__main__':
main()
当程序运行时,我收到以下错误:
Process Process-2:
Traceback (most recent call last):
File "c:\python27\lib\multiprocessing\process.py", line 258, in _bootstrap
self.run()
File "c:\python27\lib\multiprocessing\process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\matthew.parets\Documents\..Development\RaspberryPi\windows\seri
alRecvPrototype.py", line 27, in processIncomingSerialMessages
line = modemPort.readline()
File "c:\python27\lib\site-packages\serial\serialwin32.py", line 246, in read
if not self.hComPort: raise portNotOpenError
AttributeError: 'Serial' object has no attribute 'hComPort'
如果我将串行端口(modemPort)的打开位置作为 processIncomingSerialMessages 的第一行,则程序可以正常工作。问题是我需要将输入和输出与调制解调器解耦,因此我需要将串行对象作为参数传递。而Python似乎不喜欢这样。
任何人都可以看到我所犯的错误,或者任何人都可以提出替代方案吗?