Python-从子进程获取输出并将其与IF进行比较

时间:2013-07-13 12:06:25

标签: python subprocess

我已经了解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不能按照我的意愿行事。即使我以root身份运行脚本,IF语句也总是显示为false。我也试过了uid == 1000也失败了。

我怀疑这是因为我将'其他'与字符串或整数进行比较,但我不知道如何获得其他内容或如何转换它,但这只是外行人的推测。 HALP。

2 个答案:

答案 0 :(得分:0)

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

uid似乎与b'1000\n'类似。因此,请使用if int(uid.strip()) != 0

答案 1 :(得分:0)

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

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

使用subprocess这不是正确的方法。