2015-02-11 81 views
1

我想创建一个文件(最好与open(…)一起使用),并让所有者与运行代码的人员不同。为其他用户创建文件

我试图创建该文件并使用os.chown来更改所有者,但这似乎不起作用。这里是我的尝试:

import os 
import pwd 
user=pwd.getpwnam('user') 
with open('somefile', 'w') as f: 
    f.write('blah, blah') 

os.chown('somefile', user.pw_uid, user.pw_gid) 

我得到以下错误:

OSError: [Errno 1] Operation not permitted: 'somefile' 

我本来以为这是改变文件的所有者的正确方法。

+3

您的代码很好,但普通用户dos无权执行此操作。 (这是您无法编码的操作系统的有意限制。)您必须以具有适当权限的用户身份运行程序。但请注意,在已创建文件的时间窗口中存在争用条件,但不包含chown()。 – 5gon12eder 2015-02-11 16:59:43

回答

1

问题是您没有以root身份创建新文件,这是必需的。请在SO中查看this问题的评论。应该解决问题。

更新: 您需要超级用户权限才能执行此操作。所以当运行你的程序时,使用

sudo python yourprogramname.py 

这将允许你的python脚本超级用户权限。

+0

os.getenv('SUDO_UID')为我返回None。 – Mark 2015-02-11 17:13:49

+0

你是以超级用户身份运行吗?用'sudo python'命令启动python。它会询问您的密码。那么在你输入你的密码后,它将像平常一样打开python。只有这一次它应该返回一个ID,如'1002'或类似的东西。 – Yojimbo 2015-02-11 17:48:45

+0

谢谢 – Mark 2015-02-11 18:13:22

相关问题