我正在尝试使用PySerial从我的Windows 7 PC连接到我的手机,代码如下:
import wmi
import serial
c = wmi.WMI()
modem = c.query("SELECT * FROM Win32_POTSModem").pop()
ser = serial.Serial(modem.AttachedTo, modem.MaxBaudRateToSerialPort)
try:
ser.write('at \r\n')
print ser.readline()
finally:
ser.close()
但在write调用中会出现以下错误:
Traceback (most recent call last):
File "D:\Alasdair\Documents\Python Scripts\Phone Interface\test.py", line 14, in <module>
ser.write('at \r\n')
File "C:\Python26\Lib\site-packages\serial\serialwin32.py", line 255, in write
raise SerialException("WriteFile failed (%s)" % ctypes.WinError())
SerialException: WriteFile failed ([Error 6] The handle is invalid.)
我试过用TeraTerm连接,效果很好,所以和手机本身的连接没有问题。
我已经找了好几年试图找到一个解决办法,但没有想出任何有效的办法。有什么想法吗?
我刚刚在64位windows(XP、Vista和7)上解决了这个问题。
此问题是由无效的句柄转换引起的,该转换由于旧的python-win32函数而放弃64位值的高32位。 如果遇到这种问题,请使用win32file等模块中包含的新python-win32函数。 请在site packages\serial\serialwin32.py上编写以下代码。
我在Windows764位上,使用Python2.6,它也给了我同样的错误。
当使用类似的程序使用c库时,相同的端口会正确响应。这里发生了什么?听起来像是pyserial或ctypes中的一个bug。你也在用64位吗?
用pyserial编写的源代码看起来非常简单
可能是64位ctypes的问题?
更新: 对我来说至少是个64位的问题。我刚刚安装了一个x86版本的python(这次是3.1),现在运行良好。显然,64位ctypes只能导入64位库。听起来很奇怪,无法访问操作系统库。
我在Python 2.7win7 x64和pyserial2.5中观察到这个问题,它们是从easy_install.exe自动安装的
PySerial 2.4没有这个问题,所以如果您的代码与2.4兼容,就使用这个代码,问题就解决了。注意,还必须使用pywin32,并选择与python对应的版本(例如pywin32-216.win-amd64-py2.7.exe)。
另见https://sourceforge.net/tracker/?func=detail&aid=2921959&group_id=46487&atid=446302%5D2921959
相关问题 更多 >
编程相关推荐