我在后台运行脚本时遇到问题。
我有Lua文件:
function on_msg_receive (msg)
if (msg.text=="Alarmon") then
send_msg (msg.from.print_name, 'Sensor ON!', ok_cb, false)
io.popen('/home/pi/led.py')
end
end
Python文件(用于测试):
import RPi.GPIO as GPIO
import time
pinn=4
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(pinn,GPIO.OUT)
print "LED on"
GPIO.output(pinn,GPIO.HIGH)
time.sleep(5)
print "LED off"
GPIO.output(pinn,GPIO.LOW)
GPIO.cleanup()
执行后我得到:
/home/pi/led.py: 1: /home/pi/led.py: import: not found
/home/pi/led.py: 2: /home/pi/led.py: import: not found
/home/pi/led.py: 4: /home/pi/led.py: Syntax error: word unexpected (expecting ")")
其Lua文件与Telegram一起使用。我运行消息" Alarmon"然后它工作,直到弹出错误。
我认为io.popen
在python中运行led.py
存在问题。
如何改变?
答案 0 :(得分:0)
在您的代码中,您只向io.popen提供Python脚本的路径。
function on_msg_receive (msg)
if (msg.text=="Alarmon") then
send_msg (msg.from.print_name, 'Sensor ON!', ok_cb, false)
io.popen('/home/pi/led.py')
end
您的计算机不知道如何处理它。
io.popen(prog [,mode])
此功能取决于系统,并非全部可用 平台。
在分离的进程中启动程序prog并返回文件句柄 您可以用来从该程序读取数据(如果模式为“r”,则为 默认)或将数据写入此程序(如果模式为“w”)。
因此,为了使其工作,您必须实际启动一个程序,在您的情况下是Python解释器。 鉴于您在PATH系统变量中具有Python解释器的位置,这应该起作用:
io.popen('Python')
正如您希望interpeter运行脚本一样,您还将脚本的路径作为参数提供。
io.popen('Python /home/pi/led.py')
您将进入命令行界面...
如果您不打算在程序中使用任何输入或输出,您只需使用:
os.execute('Python /home/pi/led.py')
代替