Lua在后台

时间:2018-04-22 10:32:43

标签: python security lua telegram

我在后台运行脚本时遇到问题。

我有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存在问题。 如何改变?

1 个答案:

答案 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

您的计算机不知道如何处理它。

来自Lua 5.3 Reference Manual

  

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')

代替