当前位置: 首页 > 面试题库 >

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

时修贤
2023-03-14
问题内容

我定义了一个不时切换我的代理设置的功能,问题是我希望它在没有人工干预的情况下循环运行。但是,当我在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密码进行硬编码,使其在功能开始时运行?


问题答案:

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

from subprocess import call

pwd='my password'
cmd='ls'

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


 类似资料:
  • 问题内容: 我经常发现自己需要编写一些脚本,这些脚本必须以普通用户身份执行某些部分,而以超级用户身份执行其他部分。我知道在SO上有一个类似的问题,答案是两次运行相同的脚本并以sudo的身份执行,但这对我来说还不够。有时,在执行sudo操作后,我需要恢复为普通用户身份。 我已经在Ruby中编写了以下代码来做到这一点 不幸的是,如果用户输入了错误的密码,则使用该代码会使脚本崩溃。理想情况下,它应该使用

  • 问题内容: 我需要使用Java以root和sudo用户身份执行给定命令。但是,我不确定我可以用来传递密码的方法。有什么方法可以将密码传递给终端? 问题答案: 您可以将sodu全部放在一起,并创建一个shell脚本suid root,然后运行它。 每当调用该脚本时,它将以root身份运行。

  • 问题内容: 当我使用python.exe运行它时,我有一些Python代码可以正常运行,但是如果使用pythonw.exe,则失败。 我收到的消息是: 但是,如果我未指定’stdout’参数,则subprocess.call()会开始正常。 我可以看到pythonw.exe可能正在重定向输出本身,但是我看不到为什么我被阻止为新线程指定stdout。 问题答案: 和handle无效,因为python

  • 问题内容: 我写了一些如下的语句: 两者都会弹出一个控制台。 如何阻止它弹出控制台? 问题答案: 该过程可以隐藏控制台窗口: 或设置创建标志以禁用创建窗口: 上面仍然是一个控制台进程,具有用于控制台I / O的有效句柄(通过调用所返回的句柄进行验证)。它只是没有窗口,也不继承父级控制台(如果有)。 你可以通过强制孩子完全没有控制台来走得更远: 在这种情况下,子级的标准句柄(即GetStdHandl

  • 问题内容: 当我对sudo使用任何命令时,环境变量不存在。例如,设置HTTP_PROXY后,如果不使用,该命令可以正常工作。但是,如果我键入它说它不能绕过代理设置。 问题答案: 技巧是通过命令将环境变量添加到文件并添加以下行: 摘自ArchLinux Wiki 。 对于Ubuntu 14,您需要在单独的行中指定,因为它会返回多变量行的错误:

  • 问题内容: 我正在编写一个简单的shell脚本,该脚本会更改网络硬件的mac地址。其中一行是: 我的问题是sudo脚本提示输入密码。有什么办法可以在不提示用户输入密码的情况下执行此操作? 问题答案: 最肯定的是,如果您不介意为该特定用户“免费使用”该特定命令: 基本上在这里看到我的其他答案:[Shell脚本-随着时间的流逝丢失了Sudo权限 可能最简单的方法是 另外,您可以在同一终端(tty /