2016-07-25 50 views
0

我试图抓住uart-line并将此字符串赋予shell脚本;抓住串行输入行并将它们移动到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()) 

不起作用。

+0

'os.system()'不会返回任何你想'打印'的东西。如果子进程向标准输出输出任何东西,那就是它将要去的地方,并且你的Python脚本不会知道。如果你想捕获子进程打印的内容,你有另一个理由来看看'subprocess'模块,特别是'check_output'方法(Python 2.7+) – tripleee

回答

0

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

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

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

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

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

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

我不知道你想达到与print声明什么。处理代码的调用和输入/输出的更好方法是从os切换到subprocess module

+0

,打印命令仅用于测试串行读取。 – dokle

+0

@dokle很高兴知道。我希望我可以帮忙... – jotasi

+0

为我工作,谢谢 – dokle

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

+0

谢谢, - 是的,我会为每个输入行开始一个新脚本,因为每天只有几行代码,我需要能够更改进程脚本在不中断阅读过程的情况下,从5年前开始,我决定编写两个脚本,一个用于阅读,另一个用于测试线条。但是用于阅读的shell脚本在新的hw(pi 3)上不起作用,所以现在我正在搜索新的“阅读”脚本。 – dokle

+0

我想尝试管道尽快,谢谢。 – dokle

相关问题