2015-12-09 69 views
1

是否有可以在沒有root訪問權限的情況下運行腳本,但是如果需要root訪問權限,則可以收集密碼,並且可以選擇部分代碼作爲須藤?如果需要,我可以使用密碼和子進程以root身份逐個運行系統命令。但是,我正在使用一個用於腳本的庫,並要求每個腳本都以root權限運行。如果我可以做點像Python - 將代碼的選擇部分作爲sudo運行

runAsRoot(blackBoxFunction, args) 

我會被設置。我真的只有一塊代碼需要root訪問權限。我不想編輯整個圖書館來滿足我的需求。我可以做一個解決方法,在那裏我生成一個腳本,然後使用子進程作爲sudo執行腳本,但這似乎很容易出錯,並且會對我如何設置所有內容感到痛苦,更不用說我可能不得不隨時生成腳本有一個偉大的腳本可以處理所有可能的情況。

+3

什麼這是一個操作系統的任務,而不是一個Python的問題。在Unix上,非特權進程只能通過啓動一個單獨的set-uid可執行文件來提升其特權。所以,只有將腳本分成兩個程序,你才能做到你想要的。他們如何溝通取決於你。 – alexis

+0

或者只是強制用戶以root的身份運行你的腳本......嗯,我好像還記得幾天前告訴過你這個同樣的事情......但是西紅柿tomahtoh ......也許有人能夠給你一個不同的答案或者以你接受它的方式給你加上短語...... –

+0

請記住,設置使用腳本不起作用。 :) –

回答

1

這裏是另一種方式來幾乎得到你想要

import inspect 
import os 
def sudo_call(fn,*args): 
    with open("some_test.py","wb") as f: 
     f.write(inspect.getsource(fn)) 
     f.write("%s(*%r)"%(fn.__name__,args) 
    os.system("echo <SUDO_PASSWORD> | sudo -S -p '' python some_test.py ") 

def hello(a,b): 
    print a+b 

sudo_call(hello,[1,2]) 
+0

是否有任何理由'os.system'用於'subprocess'上? – Shatnerz

+0

更少的字母類型...如果你使用子進程im不知道如何支持管道,你可能必須做'proc.stdin.write(SUDO_PW)' –