-1

私はすでに Java を知っているので、すべてのニーズに合わせて Linux で Python を試してみることにしました。

スクリプトがルートとして実行されているかどうかを確認する簡単なプログラムを作成し、そうでない場合はパスワードを要求します。

    import subprocess;
process = subprocess.Popen(['id', '-u'], stdout=subprocess.PIPE)
uid, err = process.communicate()
print(uid)

if uid != 0:
    lpass = raw_input("\nYou are NOT running this script as root.\n Please enter your Linux password:")

これは出力です:

1000 
You are NOT running this script as root.
 Please enter your Linux password:

さて、問題は IF が機能しないことです。より正確には、IF がuid != 0やりたいことを実行しないことです。ルートとしてスクリプトを実行した場合でも、IF ステートメントは常に false として出力されます。私も試しましたが、uid == 1000どちらも失敗しました。

これは、「何か他のもの」を文字列または整数と比較しているためだと思われますが、他の何かを取得する方法や変換する方法がわかりませんが、これは素人の推測にすぎません。半分。

4

2 に答える 2

0

Popen.communicate3.x では文字列またはバイトのタプルを返します。

uidようなもののようb'1000\n'です。を使用しますif int(uid.strip()) != 0

于 2013-07-13T12:12:16.433 に答える
0

あなたは物事を過度に複雑にしています。有効なユーザー ID を確認する必要がある場合は、次を使用します。

import os
if os.geteuid() != 0:
    ...

これを使用subprocessするのは正しい方法ではありません。

于 2013-07-13T17:30:17.960 に答える