修改目标Subprocess中的变量

时间:2014-03-11 17:06:04

标签: python subprocess popen

一直在搜索,但没有找到答案,或者它对我没有用。

我用Raspberry Pi和PIR传感器构建了家庭报警系统。 警报系统由 control.py alarm.py 脚本组成。 control.py 是用于控制警报检测的简单烧瓶网页。 alarm.py 基本上是一个while循环,用于检查传感器是否已被触发。

我从 control.py 开始使用Popen alarm.py 。有没有办法从 control.py 修改 alarm.py 中的变量(以便while循环中断和程序退出)?

启动检测程序的control.py中的代码行:

detection = subprocess.Popen(['python', 'alarm.py'], shell=False)

alarm.py中的循环:

while True:


    CurrentState=GPIO.input(GPIO_PIR)

    if CurrentState==1 and PreviousState==0:
        print "Motion detected!"
        PreviousState=1
    elif CurrentState==1 and PreviousState==1:
        print "Motion detected!"
    elif CurrentState==0 and PreviousState==1:
        PreviousState=0

    time.sleep(0.1)

GPIO.cleanup()

1 个答案:

答案 0 :(得分:1)

由于您将alarm.py作为一个单独的进程启动,因此没有共享变量空间可以直接设置alarm.py可以访问的control.py中的任何变量。

你有几个选择:

  • 使用threads代替子处理
  • 使用multiprocessing模块,该模块提供两个Python进程之间的通信机制
  • 将alarm.py子进程的stdin附加到管道并尝试在循环的每次迭代中进行非阻塞读取,当您准备退出时从control.py写入该管道
  • 使用某些操作系统级别修改作为alarm.py退出的信号(例如,在特定位置创建文件)