2015-02-11 82 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

相關問題