2017-06-21 107 views
2

我定義了一個函數,可以隨時切換我的代理設置, 問題是我希望它在沒有人工干預的情況下在循環中運行。但是當我在sudo中執行程序時,它會在第一次運行時順利地運行,第二次它會要求我輸入sudo密碼。下面是代碼位:如何在使用subprocess.call時鍵入sudo密碼?

def ProxySetting(Proxy): 
    print "ProxyStetting(Proxy)" 
    call("networksetup -setwebproxy 'Wi-Fi' %s" "on" % Proxy, shell = True) 
    call("networksetup -setsecurewebproxy 'Wi-Fi' %s" "on" % Proxy, shell = True) 
    call("networksetup -setftpproxy 'Wi-Fi' %s" "on" %Proxy , shell=True) 

我可以使用線程,但我相信有這樣做的一種方式,不會造成問題。我如何硬編碼我的sudo密碼,以便它在函數的開頭運行?

+0

這是更好地創建使用** ** systemd服務和服務配置文件上添加的權限。 – Mikael

+0

我不知道我是否正確理解你的問題,但你可能想看看我的回答https://stackoverflow.com/a/44540122/7738328,其中討論了在'subprocess'中使用'sudo'。但是,如上所述,如果完全避免使用'sudo'來執行命令會更好。 – JohanL

+0

只要輸入我的密碼,只需將此代碼運行即可。我想自動執行該腳本,意味着不必手動輸入該密碼。我會嘗試Mikael解決方案,但不必爲每個需要root命令的文件添加權限。 – TB1

回答

2

在這裏,你可以執行命令:sudo沒有互動提示,要求您輸入您的密碼:

from subprocess import call  

pwd='my password' 
cmd='ls' 

call('echo {} | sudo -S {}'.format(pwd, cmd), shell=True) 
+0

儘管此代碼可能會回答這個問題,但提供關於此代碼爲什麼和/或如何回答該問題的其他上下文可提高其長期價值。 –

+0

很好地謝謝你 – TB1

相關問題