Skip to main content
 首页 » 编程设计

Python 在 sudo 中调用 bash 脚本的子进程

2025年05月04日9luoye11

我在我的树莓派上运行一个 python 脚本。我必须在 sudo 中运行它才能使用 rpi.gpio 库,但是当我这样做时,它不会让我在非 sudo 中运行我的 bash 脚本。这会导致我的 ssh 命令提示输入密码,即使设置了 key 生成身份验证。

我确信我遗漏了一些简单的东西。谁能帮忙?

运行 python 脚本:

sudo python ./runcam.py 

在我运行的 py 脚本中:

subprocess.call("./runit", shell=True) 

还有我的 ssh 脚本:

#!/bin/bash 
 
      FNAME=`date +'%H-%M-%S-%m%d%Y'` 
 
      ssh pi@192.168.0.8 ' 
        mkdir $FNAME 
      ' &  
 
      ssh pi@192.168.0.9 ' 
        mkdir $FNAME 
      ' &  

请您参考如下方法:

您还可以使用 sudo 删除您的 root 权限。您只需要检查用户 ID 0 和环境变量“SUDO_USER”,然后是 sudo -u "$SUDO_USER"命令。

您可以像这样在 bash 脚本中执行此操作:

# if we're root from sudo, run this script as the original user instead 
[[ "$(id -u)" = "0" && -n "${SUDO_USER:-}" ]] && exec sudo -u "$SUDO_USER" "$0" "$@" 

完整脚本示例:

#!/bin/bash -u 
[[ "$(id -u)" = "0" && -n "${SUDO_USER:-}" ]] && exec sudo -u "$SUDO_USER" "$0" "$@" 
id -u 

此脚本将打印您的 用户 ID,无论它是否使用 sudo 运行。