-1

私はpythonデコレータを学ぼうとしていて、次のコードを書きました。しかし、それはエラーを出し続けます。

import os
import sys

def authenticate(fn):
    def wrapper(*args):
        euid = os.geteuid()
        if euid != 0:
            print "This command requires privliged mode. Enter password.."
            args = ['sudo', sys.executable] + sys.argv + [os.environ]
            os.execlpe('sudo', *args)
        fn(*args)
    return wrapper

@authenticate
def show_files(dir):
    files = [f for f in os.listdir(dir)]
    for file in files:
        if os.path.isfile(file):
            print file

dir = raw_input("Please enter a directory name\t")
show_files(dir) 

次のトレースバックを取得します。

Traceback (most recent call last):
    File "auth1.py", line 24, in show_files(dir)
    File "auth1.py", line 11, in wrapper fn(*args)
    File "auth1.py", line 16, in show_files files = [f for f in os.listdir(dir)]
    OSError: [Errno 2] No such file or directory: ''

アイデアは、show_files自分自身を認証できるユーザーに対してのみ関数を実行することです。私の問題は、認証の記述方法とexeclpe呼び出しのようです。どんな助けでも感謝します。

4

2 に答える 2

0

問題がデコレータ構文にあるのか、それとも execlpe/sudo 部分にあるのか知っていますか? 一度にこれらの課題の 1 つに取り組むようにしてください。ただし、コードを実行しようとはしていません。

幸運を!

ウリ

于 2013-01-12T09:15:46.207 に答える
0

次のコードは正常に動作します。有益な方法で回答してくれた人々に感謝します。

!/usr/bin/パイソン

OS のインポート

システムをインポート

デフ認証 (fn):

def wrapper():

    euid = os.geteuid()

    if euid != 0:

        print "This command requires privliged mode. Enter password.."

        os.execvp("sudo", ["sudo"] + sys.argv)

    fn()

return wrapper

@認証する

デフ show_files():

dir = raw_input("Please enter a directory name\t")

files = [f for f in os.listdir(dir)]

for file in files:

    if os.path.isfile(file):

        print file

show_files()

于 2013-01-13T08:33:03.067 に答える