我是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]
输出:密码
答案 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
?