gpt4 book ai didi

Pythonic 方式来遍历阴影等

转载 作者:行者123 更新时间:2023-12-01 01:43:46 25 4
gpt4 key购买 nike

我正在尝试使用 python 实现逻辑:

 cat /etc/shadow | awk -F: '($2 == "" ) { print $1 " does not have a password "}'

如果上面返回用户的输出,我会这样做

passwd -l <username>

我正在尝试使用 python 实现上述逻辑,但我不太确定它是否能以这种方式工作;这是我的Python代码:

/etc/shadow 看起来像

root:*:17709:0:99999:7:::
daemon:*:17709:0:99999:7:::
bin:*:17709:0:99999:7:::
sys:*:17709:0:99999:7:::
sync:*:17709:0:99999:7:::
games:*:17709:0:99999:7:::
man:*:17709:0:99999:7:::
lp:*:17709:0:99999:7:::
mail:*:17709:0:99999:7:::
news:*:17709:0:99999:7:::
uucp:*:17709:0:99999:7:::
proxy:*:17709:0:99999:7:::
www-data:*:17709:0:99999:7:::
backup:*:17709:0:99999:7:::

代码

with open("/etc/shadow") as file:
for line in file:
line = line.rstrip()
if line[line.find(":")+1:line.find(":")]=="":
print "This is a problem"
elif line[line.find(":")+1:line.find(":")]=="*":
print line[line.find(":")+1:line.find(":")]
else:
print "All Good"

上面的代码返回“这是一个问题”,这是不对的

最佳答案

您可以使用re提取所需的列:

import re

data = """root:*:17709:0:99999:7:::
daemon:*:17709:0:99999:7:::
bin:*:17709:0:99999:7:::
sys:*:17709:0:99999:7:::
sync:*:17709:0:99999:7:::
games:*:17709:0:99999:7:::
man:*:17709:0:99999:7:::
lp:*:17709:0:99999:7:::
mail:*:17709:0:99999:7:::
news:*:17709:0:99999:7:::
uucp:*:17709:0:99999:7:::
proxy:*:17709:0:99999:7:::
www-data:*:17709:0:99999:7:::
backup:*:17709:0:99999:7:::"""

groups = re.findall('(.*?):(.*?):(.*?):(.*?):(.*?):(.*?):(.*?):(.*?):', data)

if all(g[1].strip() for g in groups):
print('All good')
else:
print('This is a problem')

打印:

All good

此正则表达式的说明 here 。在第二组 (g[1]) 中,您拥有隐藏密码 (*) 或空字符串。

关于Pythonic 方式来遍历阴影等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51611076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com