我定义了一个偶尔切换我的代理设置的函数, 问题是我希望它在没有人工干预的循环中运行。但是当我在sudo中执行程序时,它会在第一次顺利运行时调用,第二次它会询问我的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 :(得分:6)
在这里,您可以执行命令sudo而无需交互式提示,要求您输入密码:
from subprocess import call
pwd='my password'
cmd='ls'
call('echo {} | sudo -S {}'.format(pwd, cmd), shell=True)
答案 1 :(得分:0)
将密码通过python传递给shell命令的另一种方法是不将其显示在任何命令历史记录或ps
输出中:
p = subprocess.Popen(['sudo', self.resubscribe_script], stdin=subprocess.PIPE)
p.communicate('{}\n'.format(self.sudo_password))
请注意,使用communicate
仅允许将一个输入提供给stdin。还有其他获取可重用输入的方法。