-1

我已经了解 Java,并决定在 Linux 上尝试一些 Python 来满足我的所有需求。

做了一个简单的小程序来检查脚本是否以 root 身份运行,如果不是,我们要求输入密码。

    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 不起作用,或者更准确地说,uid != 0它没有做我想让它做的事情。IF 语句总是显示为假,即使我以 root 身份运行脚本也是如此。我也试过uid == 1000了,也失败了。

我怀疑这是因为我将“其他东西”与字符串或整数进行比较,但我不知道如何得到其他东西或如何转换它,但这只是外行的猜测。哈尔普。

4

2 回答 2

0

你把事情复杂化了。如果您需要检查有效用户 ID,请使用:

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

subprocess用于此不是正确的方法。

于 2013-07-13T17:30:17.960 回答
0

Popen.communicate在 3.x 中返回字符串或字节的元组。

uid似乎是这样的b'1000\n'。所以使用if int(uid.strip()) != 0.

于 2013-07-13T12:12:16.433 回答