如何修复TypeError:python 3.4、pyserial 2.7虚拟串行端口中需要一个整数

如何修复TypeError:python 3.4、pyserial 2.7虚拟串行端口中需要一个整数,python,python-2.7,serial-port,usb,pyserial,Python,Python 2.7,Serial Port,Usb,Pyserial,已编辑 你好,程序员社区, 我在处理Python3.4中的pyserial时遇到了一些问题 首先,我没有串行端口,所以我使用“Eltima软件的虚拟串行端口驱动程序7.2”成对创建虚拟串行端口,这意味着我可以尝试从这些端口发送和接收数据,在我的情况下,我只创建连接到COM2的COM1,然后我通过HW group安装了Hercules SETUP utility来监视这些串行端口 因此,从理论上讲,如果我用PYTHON发送(写入)数据,我可以在HERCULES中看到它,如此链接所示 我试图创建自己

已编辑

你好,程序员社区,
我在处理Python3.4中的pyserial时遇到了一些问题 首先,我没有串行端口,所以我使用“Eltima软件的虚拟串行端口驱动程序7.2”成对创建虚拟串行端口,这意味着我可以尝试从这些端口发送和接收数据,在我的情况下,我只创建连接到COM2的COM1,然后我通过HW group安装了Hercules SETUP utility来监视这些串行端口

因此,从理论上讲,如果我用PYTHON发送(写入)数据,我可以在HERCULES中看到它,如此链接所示

我试图创建自己的代码

def mInitizalise():
 set_ser = serial.Serial(port="COM1", baudrate=9600, 
                         parity = serial.PARITY_NONE,
                         stopbits=serial.STOPBITS_ONE,
                         bytesize = serial.EIGHTBITS,
                         timeout=1)
 set_ser.close()
 set_ser.open()
 if set_ser.isOpen():
     print ('Open: ' + set_ser.portstr)
     temp = input('Type what you want to send, hit enter:\r\n')
     set_ser.write(temp)
 set_ser.close()
有一个错误

>>> 
>>> Open: COM1
Type what you want to send, hit enter:
hello
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\idlelib\run.py", line 121, in main
    seq, request = rpc.request_queue.get(block=True, timeout=0.05)
  File "C:\Python34\lib\queue.py", line 175, in get
    raise Empty
queue.Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\me\Downloads\SerialTest.py", line 25, in <module>
    ser.write(temp)
  File "C:\Python34\lib\site-packages\serial\serialwin32.py", line 283, in write
    data = to_bytes(data)
  File "C:\Python34\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
    b.append(item)  # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required
>
>>>开放:COM1
键入要发送的内容,按enter键:
你好
Tkinter回调中的异常
回溯(最近一次呼叫最后一次):
文件“C:\Python34\lib\idlelib\run.py”,第121行,在main中
seq,request=rpc.request\u queue.get(block=True,timeout=0.05)
get中第175行的文件“C:\Python34\lib\queue.py”
空举
排队,空的
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“C:\Users\me\Downloads\SerialTest.py”,第25行,在
序列写入(临时)
写入文件“C:\Python34\lib\site packages\serial\serialwin32.py”,第283行
数据=到字节(数据)
文件“C:\Python34\lib\site packages\serial\serialutil.py”,第76行,以字节为单位
b、 append(item)#这个函数为我们的仿真处理int和str,为python3.x处理int
TypeError:需要一个整数
谁能帮帮我吗


事先感谢您的帮助

您使用的是windows。。。这个例子是针对linux的

试试
serial.serial(“COM1”,9600)
(它可能不是真正的“COM1”,您需要它的实际comN名称)

在windows中,通信端口被枚举为COM1..99。你可以在设备管理器中看到它是什么。我弄明白了,------棘手的python------请把我拉上来,检查我的其他问题(当然有答案)

ok首先在一行中分配串行端口的效果不如

#Method 1
set_ser = serial.Serial(port="COM1", baudrate=9600, parity = serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize = serial.EIGHTBITS, timeout=1)
这样写

#Method 2
set_ser = serial.Serial()
set_ser.port="COM1"
set_ser.baudrate=9600
set_ser.parity = serial.PARITY_NONE
set_ser.stopbits=serial.STOPBITS_ONE
set_ser.bytesize = serial.EIGHTBITS
set_ser.timeout=1
然后使用方法2

第二个棘手的部分是这条线

set_ser.write(temp1.encode('utf-8'))
Python分配命令时.write必须具有.endcode()或.encode('utf-8')或('hex')或('ascii')等。请检查此链接 这个呢

现在最后的代码是

def mSend():
  global set_ser, a
  set_ser = serial.Serial()
  set_ser.port="COM1"
  set_ser.baudrate=9600
  set_ser.parity = serial.PARITY_NONE
  set_ser.stopbits=serial.STOPBITS_ONE
  set_ser.bytesize = serial.EIGHTBITS
  set_ser.timeout=1
  print ('Open: ' + set_ser.portstr)
  a = 0
  while a==0:
    temp = input('write open\r\r')
    if (temp == "open"):
      set_ser.close()
      set_ser.open()
      while set_ser.isOpen():
        temp1 = input('Type what you want to send, hit enter:\r\n')
        set_ser.write(temp1.encode('utf-8'))
        if (temp1 == "close"):
          set_ser.close()
          print ('\n\nClosed')
          a = 1
    elif (temp == "close"):
      set_ser.close()
      a = 1
    else:
      print ('unless you write open or close you can not move')

一个按钮可以调用此函数(此代码),它将打开串行端口,发送数据,直到用户写入“close”

仅输入整数,所以COM7 set\u ser.port=7,但实际上您必须执行N-1,因此在设备管理器窗口中,您会看到COM7=>pythoncode:set\u ser.port=6

谢谢,我的代码行吗,你知道我可以在串口上写的其他例子吗?你是什么意思?它有用吗?没有太多。。。问题是什么?我的意思是它不工作,当我将端口更改为“COM3”时,它表示系统找不到指定的文件,我只想要一个pyserial for Python3.4的简单示例,我可以在我的计算机windows 8上尝试,你完全改变了这个问题。。。这正是您最初问题的答案。我确实这样做了,正如您所说,我已将端口更改为(“COM1”,9600),但我仍然有这个错误,TypeError:需要一个整数