2017-06-21 112 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

相关问题