如何在 Python 中调用 sudo 密码请求

How to invoke sudo password request in Python

我有一个 USB GPIO 电子小发明连接到台式 PC 运行ning Linux Mint 17 "Mate";在此环境中,小发明显示为 /dev/ttyACM0。我写了一个 GUI Python 2.7/Tkinter 程序来通过 pySerial 模块控制 gizmo。该程序在使用 sudo 从控制台 运行 时运行。

作为一个 GUI 程序,我希望能够从 "Mate" 桌面 运行 它 - 但我不能,因为作为一个串行设备,访问 gizmo 需要获得 root 权限通过 sudo,必须在终端调用 wot。

# here's the offending code
import serial
numa = serial.Serial("/dev/ttyACM0", 19200, timeout=1)
....

我如何在 Python 程序中从 调用 "Enter your password..." 例程,这样原始用户就不会必须打开终端才能输入密码吗?

感谢您提供的任何建议!

我无法回答你的问题,但我会解决你的问题。

当您列出设备文件时,您会看到如下内容:

$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 188, 0 Apr  4 11:22 /dev/ttyACM0

所有者 (root) 和所有者组 (dialout) 都具有读写权限 (rw- ),而其他人无法访问该设备 (---)。因此,您可以简单地将用户添加到 dialout 组:

,而不是授予程序对您系统的根访问权限
$ sudo usermod -aG dialout <username>

注销和重新登录将是必要的,但之后您的脚本将能够读取和写入串行接口而无需 root 密码。

使用 gksudo 而不是 sudo

from subprocess import call
call('gksudo -D "Program requires root priveledge \nSudo "your command here",shell=True)

例如:

call('gksudo -D "Override Sudo message " cp /etc/hosts /home/new.hosts',shell=True)