使用 subprocess.call 时如何输入 sudo 密码?
how to type sudo password when using subprocess.call?
我定义了一个不时切换我的代理设置的函数,
问题是我希望它在没有人工干预的情况下循环 运行 。但是当我在 sudo 中执行程序时,它第一次被调用 en 运行s 顺利,第二次它询问我的 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 密码,以便它 运行s 在函数的开头?
在这里您可以执行命令 sudo 而无需交互式提示要求您输入密码:
from subprocess import call
pwd='my password'
cmd='ls'
call('echo {} | sudo -S {}'.format(pwd, cmd), shell=True)
通过 python 将密码传递给 shell 命令的另一种方法是:
p = subprocess.Popen(['sudo', self.resubscribe_script], stdin=subprocess.PIPE)
p.communicate('{}\n'.format(self.sudo_password))
请注意,使用 communicate
将只允许将一个输入提供给标准输入;还有其他获取可重用输入的方法。
我定义了一个不时切换我的代理设置的函数, 问题是我希望它在没有人工干预的情况下循环 运行 。但是当我在 sudo 中执行程序时,它第一次被调用 en 运行s 顺利,第二次它询问我的 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 密码,以便它 运行s 在函数的开头?
在这里您可以执行命令 sudo 而无需交互式提示要求您输入密码:
from subprocess import call
pwd='my password'
cmd='ls'
call('echo {} | sudo -S {}'.format(pwd, cmd), shell=True)
通过 python 将密码传递给 shell 命令的另一种方法是:
p = subprocess.Popen(['sudo', self.resubscribe_script], stdin=subprocess.PIPE)
p.communicate('{}\n'.format(self.sudo_password))
请注意,使用 communicate
将只允许将一个输入提供给标准输入;还有其他获取可重用输入的方法。