首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用subprocess.call时如何输入sudo密码?

使用subprocess.call时如何输入sudo密码?
EN

Stack Overflow用户
提问于 2017-06-22 03:30:51
回答 2查看 9.9K关注 0票数 6

我定义了一个函数来时不时地切换我的代理设置,问题是我想让它在没有人工干预的情况下循环运行。但是当我在sudo中执行程序时,它在en第一次顺利运行时被调用,第二次它要求我输入我的sudo密码。下面是一小段代码:

代码语言:javascript
复制
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密码进行硬编码,使其在函数开始时运行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-22 04:31:35

在这里,您可以执行命令sudo,而不会出现交互式提示,要求您键入密码:

代码语言:javascript
复制
from subprocess import call    

pwd='my password'
cmd='ls'

call('echo {} | sudo -S {}'.format(pwd, cmd), shell=True)
票数 16
EN

Stack Overflow用户

发布于 2018-11-10 04:01:54

通过python将密码传递给shell命令的另一种方法是:

代码语言:javascript
复制
p = subprocess.Popen(['sudo', self.resubscribe_script], stdin=subprocess.PIPE)
p.communicate('{}\n'.format(self.sudo_password))

请注意,使用communicate将只允许向标准输入提供一个输入;还有其他方法可以获得可重用的输入。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44684764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档