我已经了解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。
答案 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
这不是正确的方法。