2014-02-17 49 views
2

我有一個Python腳本,我想運行sudo python script.py,因爲有很多需要sudo權限的Pygame命令。如何在Python腳本中「un-sudo」一個命令?

但是,腳本中只有一個shell命令(使用os.system('...')),如果以sudo身份運行,將不起作用,但在命令行中腳本外部的標準用戶可以正常工作。

有沒有簡單的方法來「un-sudo」只是這一個命令?如果沒有這個,我可以使用python script.py運行腳本,並且除了所討論的行之外的所有行都具有sudo權限?

+7

Eh?爲什麼pygame需要sudo?如果是framebuffer訪問,f'rinstance,那麼正確的做法是配置你的系統給沒有權限的登錄用戶訪問framebuffer,而不是使用sudo。 –

+0

如果我沒有sudo運行腳本,我得到以下錯誤: pygame.display.init() pygame.error:無法打開控制檯終端 – Babelfish

+0

正確。因此,配置您的幀緩衝區以供用戶訪問。不需要在那裏使用sudo。這可能與將用戶添加到「tty」組並註銷並返回(儘管詳細信息取決於您的操作系統)一樣簡單。 –

回答

2

有可能使用sudo下降權限:

sudo -u unprivileged-user command ... 

...但意味着你可以回到你的特權被升級前的確切狀態;補充組可能不對,安全標籤可能不對,等等。簡言之,這是一種破壞性的操作。

最佳實踐是避免需要升級權限 - 例如直接向用戶提供特定任務所需的訪問權限。這個特定的情況聽起來像你需要framebuffer訪問;這很容易提供沒有根。

如果你是在一個情況下你的腳本它的一些權限的真正需要升級的最佳實踐方法是讓你的應用拆分成兩個獨立的過程 - 一個做特權的工作,和一個在做所有其他事情 - 並在它們之間使用套接字或管道通信。這是很多工作 - 太多了,更多在大多數情況下工作比配置的東西,所以你根本不需要特權升級。

+0

我已將我的用戶「pi」添加到組tty中('grep tty/etc/group'確認了這一點),但是使用'python script.py'運行我的腳本會導致很多初始化錯誤和權限錯誤,所以我可能錯過了一些東西 – Babelfish

+0

誰擁有幀緩衝設備是特定於操作系統的 - 僅僅因爲它是某些操作系統上的TTY組並不意味着它在任何地方都是一樣的。查看/ dev/fb *設備及其權限 - 或者更好的方法是使用特定於您的操作系統的支持論壇,順便說一句,最好使用'groups'命令而不是'grep';'/ etc/group'只能在登錄時讀取,所以更改不會立即進行 –

相關問題