![](/img/trans.png)
[英]How can I invoke a program that needs data on stdin with sudo (w/ password also on stdin) from Python?
[英]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.