Python 波本的sudo命令

Python 波本的sudo命令,python,Python,我想在python模块中运行sudo命令,并在python代码中提供密码。以下是我失败的尝试: output = subprocess.Popen(['sudo', 'make', 'install'], stdout=subprocess.PIPE, stdin=subprocess.PIPE) print output.communicate('mypass\n') 它从控制台窗口询问密码,然后我不想要。然后我试着: output = subprocess.Popen(['sudo', '

我想在python模块中运行sudo命令,并在python代码中提供密码。以下是我失败的尝试:

output = subprocess.Popen(['sudo', 'make', 'install'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
print output.communicate('mypass\n')
它从控制台窗口询问密码,然后我不想要。然后我试着:

output = subprocess.Popen(['sudo', 'make', 'install'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
output.stdin.write('mypass\n')
output.stdin.close()
output.wait()
os.popen("sudo make install", 'w').write('mypass')
它再次询问密码。然后我试着:

output = subprocess.Popen(['sudo', 'make', 'install'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
output.stdin.write('mypass\n')
output.stdin.close()
output.wait()
os.popen("sudo make install", 'w').write('mypass')
它再次要求输入密码。
我的代码有什么问题。我在互联网上做了一些搜索之后尝试了以上所有的尝试,看起来它们应该可以工作。

sudo、ssh、sftp都是为了知道是否有tty连接,所以它们要求输入密码。原因是在代码中输入密码是一种严重的安全违规行为

您也可以使用expect实用程序运行sudo或ssh以及python代码


sudo、ssh、sftp都是为了知道是否连接了tty而设计的,因此它们要求输入密码。原因是在代码中输入密码是一种严重的安全违规行为

您也可以使用expect实用程序运行sudo或ssh以及python代码


另一个选项是为特定命令和特定用户向/etc/sudoers添加一个条目

builduser ALL=NOPASSWD: /usr/bin/make

编辑:最好将您想要的特定命令包装在脚本中,然后允许他们在没有密码的情况下sudo访问脚本;显然,“make”是相当危险的…

另一个选项是为特定命令和特定用户向/etc/sudoers添加一个条目

builduser ALL=NOPASSWD: /usr/bin/make

编辑:最好将您想要的特定命令包装在脚本中,然后允许他们在没有密码的情况下sudo访问脚本;显然,“make”是相当危险的…

要添加用户交互,您应该使用pexpect而不是popen。这将允许您的程序正确运行sudo


在脚本中保留密码始终是一个坏主意,允许通过修改sudoer(尤其是make之类的软件)进行访问是一个安全漏洞。

要增加用户互动性,您应该使用pexpect而不是popen。这将允许您的程序正确运行sudo


在脚本中保留密码始终是一个坏主意,允许通过修改sudoer来访问,特别是对于make之类的东西,这是一个安全漏洞。

我不打算在代码中写入密码。用户将从GUI输入密码。所以您想说,上述三种尝试可能适用于sudo以外的其他命令。我说的对吗?我不会在我的代码中写密码。用户将从GUI输入密码。所以您想说,上述三种尝试可能适用于sudo以外的其他命令。我说得对吗?