一般來說,這是一個很好回答的問題。 Linux不允許非特權用戶降低PID的優點,並以root身份運行它自己的蠕蟲。sudo renice in python
這就是我的具體情況:我有一個用戶帳戶,管理幾個進程,它具有renice
的無密碼sudo
權限以及它使用的一些其他命令。我也有一個腳本,它是這個系統上所有用戶的常用入口點。該腳本既可以運行常規用戶程序,也可以運行特殊帳戶管理的進程。因此,如果腳本可以運行特定選項,則該腳本應該可以renice
,但如果不能,則默默地失敗。
我有這種情況的代碼如下所示:
subprocess.Popen(["sudo", "renice", "-20", str(process.pid)],
# shell = True,
stdout = subprocess.DEVNULL,
stderr = subprocess.STDOUT)
如果我有shell = True
註釋掉進程得到了新的美好的事物,但如果我運行作爲非特權用戶,sudo
踢出它的密碼提示並破壞我的終端輸出。擊鍵變得不可見,一切都變得愚蠢。如果我取消註釋shell = True
,我沒有終端輸出。但是,即使我以root身份運行該進程,該進程也不會改變其良好性。
受損的終端輸出可能會下降到我正在使用的終端模擬器(還沒有嘗試與另一個),但我想合併這些行爲。無論如何,從sudo
沉默,但如果用戶可以sudo成功,一個不錯的變化。
任何指針?
我想(但不完全確定),這是因爲你沒有TTY。可能是這個問題:https://unix.stackexchange.com/questions/122616/why-do-i-need-a-tty-to-run-sudo-if-i-can-sudo-without-a-密碼 - 嘗試創建一個PTY(https://stackoverflow.com/a/43012138/116546),看看這是否有幫助。 – drdaeman
你懂了!我使用的是3.x,所以如果在'Popen'中添加'start_new_session = True',那麼對於非特權用戶就會失敗並以root身份成功,所以我認爲它對於我的無密碼'sudo'用戶來說也可以。歡呼。如果您希望我接受它,請隨時發佈答案。 =) – musasabi