簡體   English   中英

如何在Python中調用sudo密碼請求

[英]How to invoke sudo password request in Python

我已經將USB GPIO電子gizmo連接到運行Linux Mint 17“ Mate”的台式PC。 在這種環境下,小控件顯示為/ 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 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM