在Python中运行change(switch)用户的命令行脚本

时间:2012-08-28 21:24:49

标签: python subprocess

我想将文本添加到只能从某个帐户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')

2 个答案:

答案 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的脚本。