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

时间:2016-07-25 03:47:08

标签: python shell variables os.system

我试图抓住一个uart - line并将此字符串提供给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

所以,"州"现在应该给一个shell脚本, 像:myscript.sh "This is the serial input..." 但我怎么能这样做?

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

不起作用。

3 个答案:

答案 0 :(得分:0)

有两种方法可以组合两个字符串(即"./myscript.sh"ser.readLine()),然后使用os.system为您提供完整的命令。例如。字符串可以是string.format方法的参数:

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

你也可以添加两个字符串:

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

我不确定您希望使用print语句实现什么目标。处理代码调用和输入/输出的更好方法是从操作系统切换到subprocess module

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果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两种情况。