我想将文本添加到只能从某个帐户ID“appid”和passwd“passx”访问的文件中 我尝试了以下代码,但这不起作用。
import os, subprocess
text=str('23.33%')
cmd = ['su', 'appid', '-c echo text >> /tofhisfile.txt']
proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.communicate('passx')
这也不起作用
os.system('su appid -c echo text >> /tothisfile.txt')
答案 0 :(得分:1)
您只能在交互模式下使用su
实用程序使用target_user的密码(或使用expect
实用程序以及su
身份验证)。如果您想使用sudo
实用程序将一个用户认证为另一个用户 - 您应该在/etc/sudoers
文件中以root身份编写适当的规则(因此根本不会要求您的source_user输入密码)。另请注意,当您使用sudo时使用sudo -u root /bin/sh -c 'echo "root cat write anywhere" > /etc/anywhere'
,如果sudo -u root echo "root can write anywhere" > /etc/anywhere
您将收到拒绝权限错误。
答案 1 :(得分:0)
您正在使用列表和shell=True
。你不想做后者,但即使你这样做,shell也需要字符串,所以你需要和你的第二个例子一样的字符串。
无论如何,您可能只想在脚本之外完成所有这些操作。因此,假设您已经setuid
已正确编辑(尽管如果您在脚本中执行此操作,那将是您使用的内容 - os.setuid
)并且只需写入文件,然后运行带有su whoever -c python mything.py
的脚本。