从指定所有者的python创建一个文件

时间:2015-07-04 14:11:57

标签: python

我正在尝试使用从python脚本预定义的所有者:group在linux上创建一个文件。

问题是python脚本以root身份运行,我无法通过两个步骤进行所有者设置:

subprocess.call("cp a b", shell=True)
subprocess.call("chown user:group b", shell=True)

因为文件创建必须通过适用于文件所有权的incron触发另一个进程。如果我分2步执行它总是以root身份触发进程(从第一个cp开始);我不想要

简而言之,有一种简单的方法可以创建一个文件,在创建时自己创建一个以root用户身份运行的python进程。

2 个答案:

答案 0 :(得分:1)

您可以更改当前进程的有效uid和gid,但新用户必须具有对要复制的文件的读取权限。那可以吗?

import os
import shutil

gid = 20      # Target group id
uid = 501     # Target user id

os.setegid(gid)
os.seteuid(uid)

from_file = '/var/root/rootfile'       # File to copy from (tested on OS X)
to_file = 'rootfile'                   # Filename to copy to
shutil.copyfile(from_file, to_file)

# Switch back to root
os.setegid(0)
os.seteuid(0)

答案 1 :(得分:0)

好的,这不是python而是UNIX问题:

默认情况下,文件始终由创建过程的用户拥有。

作为root用户,您可以更改此类操作的有效UID,然后您可以更改文件所有权。

cp支持保留原始所有者:cp -a这可能已经解决了您的问题。

在python进程中设置UID非常简单:

import os
os.setuid(<userid>)