抓取串行输入线并将它们移动到 shell 脚本

grab serial input line and move them to a shell script

我尝试获取一个 uart - 线并将此字符串提供给 shell 脚本;

#!/usr/bin/env python
import os
import serial

ser = serial.Serial('/dev/ttyAMA0', 4800)
while True :
 try:
    state=ser.readline()
    print(state)
 except:
    pass

所以,"state" 现在应该给 shell 脚本, 喜欢:myscript.sh "This is the serial input..." 但是我该怎么做呢?

print(os.system('myscript.sh ').ser.readline())

无效。

有不同的方法来组合两个字符串(即 "./myscript.sh"ser.readLine()),然后通过使用 [=14= 会给你完整的命令 运行 ].例如。字符串可以是 string.format 方法的参数:

os.system('myscript.sh {}'.format(ser.readline()))

您也可以只添加两个字符串:

os.system('myscript.sh '+ser.readline())

我不确定你想用 print 语句实现什么。处理代码的调用和 input/output 的更好方法是从 os 切换到 subprocess module.

只是传递给 os.system 函数的简单字符串连接。

import os
os.system("myscript.sh " + ser.readline())

如果myscript 可以连续读取额外的输入,您的管道就会更加高效。

from subprocess import Popen, PIPE
sink = Popen(['myscript.sh'], stdin=PIPE, stdout=PIPE)
while True:
    sink.communicate(ser.readline())

如果您必须为每个输入行开始一个新的 myscript.sh,(您真的想重新考虑您的设计,但是)您当然可以:

while True:
    subprocess.check_call(['myscript.sh', ser.readline())

请注意在这两种情况下我们 avoid a pesky shell.