Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pySerial的神秘行为_Python_Python 3.x_Arduino_Pyserial - Fatal编程技术网

Python pySerial的神秘行为

Python pySerial的神秘行为,python,python-3.x,arduino,pyserial,Python,Python 3.x,Arduino,Pyserial,我遇到了以下问题: 我这里有一个Arduino连接到我的Mac。 Arduino正在读取和响应串行数据。 我制作了一个小python3脚本,它接受用户输入并使用 pySerial将类似“set(13255)~”的命令写入Arduino。 这很好: while 1: cmd = input("<<< ") cmd += '~' if cmd != "~": serialPort.write(cmd.encode()) output = str(serialP

我遇到了以下问题:

我这里有一个Arduino连接到我的Mac。 Arduino正在读取和响应串行数据。 我制作了一个小python3脚本,它接受用户输入并使用 pySerial将类似“set(13255)~”的命令写入Arduino。 这很好:

while 1:

cmd = input("<<< ")
cmd += '~'

if cmd != "~":
    serialPort.write(cmd.encode())

    output = str(serialPort.readline()).upper()[2:-5]

    if output != " ":
        print(">>> ", output)
奇怪的是,如果我首先声明变量(cmd)作为输入,它也可以正常工作,但这意味着每次发送命令时都会手动中断

cmd = input()

cmd = 'set(13, '
cmd += str(i)
cmd += ')~'

经过几个小时的研究,我完全不知道问题出在哪里。正如我所说,数据类型在编码后总是字节。

我不知道PySerial,但我怀疑这是因为写调用没有立即发送数据

当您使用输入时,它会向缓冲区添加一个换行符,这可能会触发写调用自动刷新

在另一段代码中,在缓冲区足够大之前,不向缓冲区添加换行符,也不会刷新数据。 因此,对于flush()调用,它应该强制发送它


希望它有意义

好吧,我只是在连接到端口后不得不进行更长时间的中断。
(由于到目前为止我必须提供一些输入,所以这不是一个问题)

尝试在写入Callu后添加一个serialPort.flush。很不幸,这不起作用。
cmd = input()

cmd = 'set(13, '
cmd += str(i)
cmd += ')~'