如何在 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)
我有一个 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)