我试图抓住一个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())
不起作用。
答案 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两种情况。