抓取串行输入线并将它们移动到 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.
我尝试获取一个 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.