从另一个 python 脚本中使用 sudo 运行和结束 Python 脚本?

问题描述 投票:0回答:1

我目前正在做一个树莓派相机项目,我使用 Adafruit Neopixel 环作为环形灯。 Neopixle 库需要脚本与 sudo 一起运行才能工作,但我真的不想将整个项目作为 sudo 运行,因为我知道 sudo 应该只在必要时使用,3 出300 多行代码似乎足以证明它的合理性。另一方面,该项目还将几个参数写入 json 作为保存文件,所有这些保存都需要超级用户权限才能编辑,这使得测试非常乏味......

我已经将需要使用 sudo 运行的代码隔离成一个函数

ringlight()
,我将其转移到它自己的文件 ringlight.py 中。 在我的主要项目中,我现在用
os.system("sudo python ringlight.py")
打开我的环形灯 但是我怎样才能从我的主项目中关闭 ringlight.py 的实例而不关闭它呢?

我已经尝试将

if input() == 'q': raise SystemExit
放在我的 ringlight.py 中,然后从主脚本发送
os.system("q")
但没有达到预期的效果。

python raspberry-pi sudo neopixel
1个回答
0
投票

你可以在 Python 中使用

signal
模块。

首先,您需要在

ringlight.py
文件中导入信号模块:

import signal
import sys

def signal_handler(signal, frame):
    # Stop the ringlight effect here
    
    # Exit the program
    sys.exit(0)

signal.signal(signal.SIGTERM, signal_handler)

现在,当您使用

ringlight.py
运行
sudo python ringlight.py
脚本时,它将侦听
SIGTERM
信号并在收到信号时停止环形灯效果。

你可以这样修改你的主脚本

import os
import signal

# Start the ringlight effect
os.system("sudo python ringlight.py")

# Send the SIGTERM signal to stop the ringlight effect
pid = os.getpid()
os.kill(pid, signal.SIGTERM)
© www.soinside.com 2019 - 2024. All rights reserved.