2016-11-04 5 views
2

У меня есть gui, сделанный на поляне, и я застрял на одном.Изменить право собственности и разрешение без терминала - Python

У меня есть кнопка, которая изменяет права собственности и разрешения; он отлично работает, за исключением папок и файлов, принадлежащих root.

Есть ли способ вызвать root privilages для запуска этой команды без ввода пароля root в терминал? то есть либо предопределить его в скрипте, либо активировать всплывающее окно для пароля и ввести его в действие.

Пример кода ниже:

def on_button_clicked(self, widget): 
    path = {defined from combobox} 
    os.chdir(path) 

    uid = os.getuid() 
    gid = os.getgid() 

    for root, dirs, files in os.walk(path): 
     for d in dirs: 
      os.chown(os.path.join(root, d), uid, gid) 
      os.chmod(os.path.join(root, d), 0o755) 
     for f in files: 
      os.chown(os.path.join(root, f), uid, gid) 
      os.chmod(os.path.join(root, f), 0o755) 
+0

Любая причина, по которой запущен скрипт как root, не работает для вас? Требование «нет ввода пароля в терминал» для меня немного неясно. Вы имеете в виду, что вы никогда не хотите вводить его * когда-либо *, или просто не хотите, чтобы сценарий был прерван запросом пароля? – skrrgwasme

+0

Я думаю, вы могли бы использовать [Envoy] (https://github.com/kennethreitz/envoy) – Olian04

+0

Причина, @skrrgwasme, заключается в том, что скрипт отлично работает в gui, и если я использую os.system ('sudo chown ..... '), это заставляет его выглядеть так, как будто он имел сбой, так как на самом деле он ожидает ввода пароля root. –

ответ

0

Приз переходит к @intepidhero для proviving некоторых полезных ссылок; первый сделал трюк!

Все, что вам нужно сделать, это убедиться, что ваш пользователь/группа находится в sudoers и поместил код folling во главе вашего скрипта, и hey presto ... вы используете свое приложение, поднятое до sudo!

import os 
import sys 

euid = os.geteuid() 
if euid != 0: 
    print "Script not started as root. Running sudo.." 
    args = ['sudo', sys.executable] + sys.argv + [os.environ] 
    # the next line replaces the currently-running process with the sudo 
    os.execlpe('sudo', *args) 

print 'Running. Your euid is', euid 
+0

В ответе не нужно вставлять \ [solve \]. Просто нажмите полый флажок под стрелками голосования. Это будет [принять] (http://stackoverflow.com/help/accepted-answer) ответ в качестве решения. – skrrgwasme

 Смежные вопросы

  • Нет связанных вопросов^_^