2016-11-04 20 views
2

私は幻覚で作られたguiを持っています。端末を使わずに所有権とアクセス権を変更する - Python

所有権とアクセス権を変更するボタンがあります。それは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 ..... ')コマンドを実行すると、実際にルートpasswrodがユーザによって入力されるのを待っているように、クラッシュしたかのように見えるようになります。 –

答えて

0

賞はいくつかの有用なリンクをprovivingため@intepidheroに行きます。最初の人はトリックをやった!

あなたがしなければならないことは、あなたのユーザー/グループがsudoersにいることを確認して、スクリプトの頭の中にフォールリングコードを入れておいて、ちょっと前に... 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

答えに\ [解決済み]を入れる必要はありません。投票矢印の下にある中空のチェックマークをクリックするだけです。それは解決策として回答を受け入れます(http://stackoverflow.com/help/accepted-answer)。 – skrrgwasme

関連する問題