我希望这是一个简单的愚蠢的菜鸟错误,可以通过在某处添加一行代码来修复。
我正在使用 pySerial 从 USB 端口读取串行数据并将其打印到标准输出。我正在运行 Mac OSX 10.6。我打开终端并输入“python”,然后输入以下内容:
>>> import serial;
>>> ser = serial.Serial('/dev/tty.usbserial-XXX', 9600, timeout=1);
>>> while True:
>>> if ser.inWaiting() > 0:
>>> ser.readline();
>>> [done, I hit enter...]
这很好用。它开始很好地输出我的串行数据,正如我所期望的那样。太棒了,我想,让我用命令行参数把它放到它自己的脚本中,然后我可以随时调用它:
import sys;
import serial;
serialPort = sys.argv[1]
baudRate = sys.argv[2]
ser = serial.Serial(serialPort, baudRate, timeout=1)
while True:
if ser.inWaiting() > 0:
ser.readline()
在命令行上,我输入“python myScript.py [我的串行端口] 9600”,然后坐下来等待美丽的串行数据流 - 但没有任何结果。它只是有点挂起,直到我终止进程。
我想,也许由于某种原因它无法正常工作 - 所以我将一些调试信息放入代码中。我将我的 while 循环更新为如下所示:
while True:
print("looping...")
print(ser.inWaiting());
if ser.inWaiting() > 0:
ser.readline()
我再次运行它,我得到了“Looping...”和“0”的重复输出流。我想,也许我的命令行参数有问题 - 所以我将端口和波特率硬编码到脚本中,同样的事情。
那么,为什么会这样呢?我使用 while True: 以某种方式阻止脚本接受串行数据吗?有更好的方法吗?
我是一个完全的 Python 菜鸟。我正在编写此脚本,以创建一种在 Adobe AIR 和 Arduino 板之间进行通信的更快方式。我希望有一颗神奇的子弹,我可以放到这里让它发挥作用 - 有吗?
最佳答案
它在打印什么吗?我假设它会打印:
looping...
<ser.inWaiting() val>
然后什么都没有。添加打印语句,使其看起来像
print ser.readline()
看看是否可行。我猜当您将它作为命令执行时,解释器正在打印返回的字符串,但在脚本中,从 readline() 返回的字符串被丢弃。
关于Python Noob - 愚蠢的问题?在 Python 解释器中工作,而不是在 CLI 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044293/