在Python中插入Sudo密码

时间:2015-01-10 11:04:10

标签: python sudo

我是Python的新手。我编写了一个脚本,用于在Ubuntu中查找需要 sudo 访问权限的文件,脚本无法显示所需的输出。这是我的剧本:

import subprocess

command_1 = "echo password".split()
command_2 = "sudo -S find / -iname 'vlc.png'".split()
file_open = open("find.log", "w")

comm_1 = subprocess.Popen(command_1, stdout=subprocess.PIPE)
subprocess.Popen(command_2, stdin=comm_1.stdout, stdout=file_open)  

脚本一直工作到最后一行,因为它在STDOUT中显示密码。我猜这个问题可能在最后一行。我已尝试过SE的其他一些解决方案,但除了使用我不愿意使用的 shell = True 之外,其他解决方案都不适用。

我知道将密码放在纯文本中是一个非常糟糕的主意,但在我学习时我只需要知道为什么我的代码无效。

编辑:

import subprocess

command_1 = "echo password".split()
command_2 = "sudo -S find / -iname 'vlc.png'".split()
file_open = open("find.log", "w")

print subprocess.Popen(command_1, stdout=subprocess.PIPE).communicate()[0]

输出:密码

3 个答案:

答案 0 :(得分:1)

我建议使用sh包用于python

from sh import sudo

file = sudo.find("/", "-iname", "vlc.png")

答案 1 :(得分:0)

配置sudo以便不需要密码可能更简单。我假设您的用户名为user1,并且您希望user1可以在没有密码的情况下运行sudo find / -name vlc.png

(这只是在一台机器上运行,还是希望其他人能够轻松地在他们的机器上运行?如果是后者,那么我想我的答案没有帮助。抱歉!)

要执行此操作,请运行sudo visudo,这将安全地编辑相关的配置文件,并将其作为文件的 last 行插入:

user1    ALL=(ALL) NOPASSWD: sudo find / -name vlc.png

这是一个相当典型的问题 - 你可以在互联网上搜索“sudo without passord”,你会发现其他网页讨论同样的解决方案。

(请注意,我已删除了-S标志)

答案 2 :(得分:0)

错误在最后一行的最后一位:

import subprocess

command_1 = "echo password".split()
command_2 = "sudo -S find / -iname 'vlc.png'".split()
file_open = open("find.log", "w")

comm_1 = subprocess.Popen(command_1, stdout=subprocess.PIPE)
subprocess.Popen(command_2, stdin=comm_1.stdout, stdout=comm_1.stdout)
                                               ^^^^^^^^^^^^^^^^^^^^^^^
                                                 This is the problem

你不应该有stdout=comm_1.stdout。我删除了它,它对我有用,将find输出打印到终端。

也许您打算改为stdout = file_open