Запуск сценария с Судо означает, что вы запустите его как корень. Так что это нормально, ваш файл принадлежит root.
Что вы можете сделать, так это изменить права собственности на файл после его создания. Для этого вам нужно знать, какой пользователь запускает sudo. К счастью, существует переменная среды SUDO_UID
, которая задается при использовании sudo.
Таким образом, вы можете сделать:
import os
print(os.environ.get('SUDO_UID'))
Затем вам нужно change the file ownership:
os.chown("path/to/file", uid, gid)
Если мы вместе:
import os
uid = int(os.environ.get('SUDO_UID'))
gid = int(os.environ.get('SUDO_GID'))
os.chown("path/to/file", uid, gid)
Конечно, вы будете хотите, чтобы это как функция, потому что это более удобно, поэтому:
import os
def fix_ownership(path):
"""Change the owner of the file to SUDO_UID"""
uid = os.environ.get('SUDO_UID')
gid = os.environ.get('SUDO_GID')
if uid is not None:
os.chown(path, int(uid), int(gid))
def get_file(path, mode="a+"):
"""Create a file if it does not exists, fix ownership and return it open"""
# first, create the file and close it immediatly
open(path, 'a').close()
# then fix the ownership
fix_ownership(path)
# open the file and return it
return open(path, mode)
Использование:
# If you just want to fix the ownership of a file without opening it
fix_ownership("myfile.txt")
# if you want to create a file with the correct rights
myfile = get_file(path)
EDIT: Обновлен мой ответ спасибо @Basilevs, @ Robᵩ и @ 5gon12eder
'chown' это после того, как вы его создания. –
Я хочу, чтобы он был открыт как настоящий пользователь, безразличный, кто это ... не что-то жестко закодированное – ABR
Вы можете определить текущего пользователя и сделать это. –