Python Noob - 愚蠢的问题?在 Python 解释器中工作,而不是在 CLI 中工作

标签 python command-line loops serial-port

我希望这是一个简单的愚蠢的菜鸟错误,可以通过在某处添加一行代码来修复。

我正在使用 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 菜鸟。我正在编写此脚本,以创建一种在 Adob​​e AIR 和 Arduino 板之间进行通信的更快方式。我希望有一颗神奇的子弹,我可以放到这里让它发挥作用 - 有吗?

最佳答案

它在打印什么吗?我假设它会打印:

looping...
<ser.inWaiting() val>

然后什么都没有。添加打印语句,使其看起来像

print ser.readline()

看看是否可行。我猜当您将它作为命令执行时,解释器正在打印返回的字符串,但在脚本中,从 readline() 返回的字符串被丢弃。

关于Python Noob - 愚蠢的问题?在 Python 解释器中工作,而不是在 CLI 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044293/

相关文章:

python - 向 usb GSM 调制解调器发送 'AT' 命令在 Python 中返回空字符串

c++ - 运行存储在 `std::wstring` 中的控制台命令

html - 使用 sed 将 URL 转换为 HTML 链接?

具有两个结构的 C 迭代

Python - 读取 csv 并按列对数据进行分组

Python和DynamoDB十进制。不精确

python - DRF,将自定义字段添加到 ModelSerializer

linux - 为什么我的 cron 作业没有运行?

windows - 如果Windows批处理文件超过一分钟,请立即退出循环

html - 使用 Less 动态增加 z-index