這是一個相當具體的問題。在我的計劃中,我使用一個特定的文件用sudo的命令運行,這就是我稱之爲CHOWN.sh:Sudo在python程序中調用不起作用
#!/bin/bash
if [ "$1" = "usb"] #first argument is usb
then
chown eng:eng /mnt/usb
else
...
當我的命令調用/path/to/the/file/CHOWN.sh參數「usb」,它改變了我掛載爲/ mnt/usb的usb-key的所有權。但是,這個文件應該以root身份運行。這就是爲什麼我進入這一行的/ etc/sudoers文件:
%hmis ALL=NOPASSWD: /path/to/the/file/CHOWN.sh
這樣一來,我可以用「命令」命令來運行它。
比方說,到/ mnt/USB的所有權是根:根:
$ ls -als /mnt/usb
4 drwxr-xr-x 2 root root 4096 Feb 13 10:50 .
4 drwxr-xr-x 4 root root 4096 Mar 15 2012 ..
當我運行使用sudo命令我得到:
$ whoami
user
$ sudo /path/to/the/file/CHOWN.sh usb
$ ls -als /mnt/usb
4 drwxr-xr-x 2 eng eng 4096 Feb 13 10:50 .
4 drwxr-xr-x 4 root root 4096 Mar 15 2012 .
,從而有望命令的工作。請注意,用戶'用戶'是組'hmis'的一部分。 然而,當我使用Python文件中這個命令,它不會工作:
#!/usr/bin/python
...
subprocess.call(["whoami"])
subprocess.call(["sudo","/path/to/the/file/CHOWN.sh","usb"])
...
在程序的標準輸出,標準錯誤,我得到:
user
chown: changing ownership of '/mnt/usb' : Operation not permitted
沒有人有一個線索問題是什麼?
感謝,
薩拉
我是'bash'編程的業餘愛好者,所以這個建議可能完全脫離基礎,但是最近我也遇到了一個腳本問題,它必須以編程方式使用'sudo'。解決的辦法是在我的sudoers文件中添加'Defaults!requiretty' - 通常'sudo'只有在從終端調用時才起作用,但是這行也使得它沒有一個工作。 – 2013-04-10 09:33:22
感謝這個有趣的評論。但是,我嘗試了,但沒有幫助。其實我從終端運行我的程序(我稱之爲命令:uxterm -e python ...),所以我認爲問題在別處 – 2013-04-10 10:47:36