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

时间:2015-04-03 06:46:13

标签: python linux user-interface sudo pyserial

我在运行Linux Mint 17“Mate”的台式机上安装了一个USB GPIO电子小玩意儿;在这种环境中,Gizmo显示为/ dev / ttyACM0。我编写了一个GUI Python 2.7 / Tkinter程序来通过pySerial模块控制Gizmo。使用sudo从控制台运行时,该程序可以正常工作。

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

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

如何从Python程序中的 中调用“输入密码...”例程,这样原始用户无需打开终端即可进入密码?

感谢您提供任何建议!

2 个答案:

答案 0 :(得分:1)

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

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

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

所有者(root)和所有者组(拨出)都具有读写访问权限(rw-),而其他所有人都没有能够访问设备(---)。因此,您只需将用户添加到拨出组,而不是让程序root访问您的系统:

$ sudo usermod -aG dialout <username>

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

答案 1 :(得分:1)

使用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)