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

如何在Python中调用sudo密码请求,python,linux,user-interface,sudo,pyserial,Python,Linux,User Interface,Sudo,Pyserial,我有一个USB GPIO电子gizmo连接到运行LinuxMint17“Mate”的台式PC上;在此环境中,gizmo显示为/dev/ttyACM0。我已经编写了一个GUI Python 2.7/Tkinter程序,通过pySerial模块控制gizmo。该程序在使用sudo从控制台运行时工作 作为一个GUI程序,我希望能够从“Mate”桌面上运行它——但我不能,因为作为一个串行设备,访问gizmo需要通过sudo获得root权限,必须在终端上调用wot # here's the offendi

我有一个USB GPIO电子gizmo连接到运行LinuxMint17“Mate”的台式PC上;在此环境中,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程序的中调用“输入密码…”例程,以便原始用户不必打开终端即可输入密码


感谢您提供的任何建议

我不能回答你的问题,但我要解决你的问题

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

$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 188, 0 Apr  4 11:22 /dev/ttyACM0
所有者(root)和所有者组(dialout)都具有读写权限(
rw-
),而其他所有人都无法访问设备(
--
)。因此,您可以简单地将用户添加到拨号组,而不是授予程序根用户对系统的访问权:

$sudo usermod-aG拨号

注销和重新登录是必要的,但之后您的脚本将能够在不需要根密码的情况下读取和写入串行接口。

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

谢谢你花时间回答,芬伍德;你的解决方案很有效。我确实想知道安全性:为了获得对一个设备(USB GPIO模块)的简单访问,此解决方案消除了访问串行设备的一般限制。是的,这允许对串行设备的一般访问。但这真的是一个安全问题吗?
call('gksudo -D "Override Sudo message " cp /etc/hosts /home/new.hosts',shell=True)