2017-06-21 97 views
2

私は毎回私のプロキシ設定を切り替える関数を定義し、 問題は私が手動の介入なしにループで実行したいということです。しかし、私がsudoでプログラムを実行すると、最初にenがスムーズに実行され、2度目に私の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を見てみたいと思うかもしれません。これは 'サブプロセス'で '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

関連する問題