Python 3.x 在Python中运行Python脚本&;检查是否输出了值-if语句

Python 3.x 在Python中运行Python脚本&;检查是否输出了值-if语句,python-3.x,amazon-web-services,if-statement,boto3,amazon-iam,Python 3.x,Amazon Web Services,If Statement,Boto3,Amazon Iam,我有一个Python3脚本,它基本上运行在一个AmazonAWS帐号列表中(使用Boto3),检查他们的访问密钥是否早于x天,并报告 我想通过检查输出是否有用户来完善我的报告,并将其输出到一个文件中,供SNS通过电子邮件发送给我 以下是我已经尝试过的代码: if not os.system("python3 ListUsersWithAccessKeysOlderThan90Days.py " + accountNumber): print("No Content", f

我有一个Python3脚本,它基本上运行在一个AmazonAWS帐号列表中(使用Boto3),检查他们的访问密钥是否早于x天,并报告

我想通过检查输出是否有用户来完善我的报告,并将其输出到一个文件中,供SNS通过电子邮件发送给我

以下是我已经尝试过的代码:

if not os.system("python3 ListUsersWithAccessKeysOlderThan90Days.py " + accountNumber):
            print("No Content", file=reportName)
        else:
            print("Content", file=reportName)
我也试过这个:

        if os.system("python3 ListUsersWithAccessKeysOlderThan90Days.py " + accountNumber) == " ":
            print("No Content", file=reportName)
        else:
            print("Content", file=reportName)
但我似乎只在我的输出文件中得到了这一点:

Running on account accountNumber - accountLabel - accountEnvironment
No Content

Running on account accountNumber - accountLabel - accountEnvironment
No Content

Running on account accountNumber - accountLabel - accountEnvironment
No Content
理想情况下,我希望它看起来像这样:

Running on account accountNumber - accountLabel - accountEnvironment
No Content

Running on account accountNumber - accountLabel - accountEnvironment
Content

Running on account accountNumber - accountLabel - accountEnvironment
No Content
无内容=无需旋转访问键。 内容=用户需要旋转其键

我可以在Bash中实现这一点,但我不介意尝试在Python3中使用它

下面是我的Bash示例:

if [[ -z "$(python3 ListUsersWithAccessKeysOlderThan90Days.py ${ACCOUNT})" ]]; then
        echo -e "$ACCOUNT ($LABEL) is up to date no need to report\n" >> $REPORT
    else
    echo -e "$ACCOUNT Need keys rotating" >> $REPORT 
    fi
任何帮助都将不胜感激


谢谢,

您可以从中获取IAM用户的状态和凭据。这可能会满足大多数需求

如果您更喜欢Python,那么我已经编写了一个基本脚本,可以用来打印访问密钥超过90天的帐户中的所有IAM用户(不管他们上次使用这些密钥的时间)

Age
是访问密钥的有效期。上次使用的
是自上次使用凭证以来的天数。希望这能有所帮助

脚本的退出代码是超过90天的密钥数,因此您可以在shell脚本中使用此退出代码来决定下一步要做什么。例如:

Account, Username, Access Key, Age, Last Used
123456784321, james, AKIAJ7PL4POLWNEXAMPLE, 91, 1
123456784321, frank, AKIAL2CV9LKWEXAMPLE, 200, 100
123456784321, mary, AKIAYTWHD3BNMLEXAMPLE, 97, none
#!/bin/bash

python3 scripts_older_than_90days.py > oldkeys.csv
count=$?

if [ $count -eq 0 ]
then
  echo "All access keys good"
else
  echo "Count of old keys" $count
fi

您的实际输出和您的“理想”是相同的。。。不管怎样,你可以使用
子流程
来运行脚本并获得输出,我看不到与aws、boto3等的任何关系。我得到的是“无内容”-我的理想是基于我运行ListUsersWith的Python脚本的输出,有“内容”和“无内容”-正确,你看不到与AWS和Boto3的关系,因为它在我的脚本中,我正在运行ListUsersWith。我试图得到一个If语句,用于判断脚本是否返回内容,并基于此进行打印。基本上将我的Bash翻译成Python。我建议您只需用Python编写所有逻辑即可。既然你了解Python,那么用Python做这些事情要比用shell脚本简单得多。它已经用Bash编写了,但是把所有东西都放到Python中,这是我一直在做的事情,你能给我点启发吗?这很有帮助,但我正在研究如何用Python复制我的if语句。我已经有了一个脚本来检查IAM用户,但是当我把它推到SNS时,我希望它在没有用户时显示一条消息,说“帐户最新”,如果有用户,则运行命令(我希望在python中使用这种逻辑)。我正在用我的脚本运行一个30多个帐户的列表。您可以计算Python脚本中的旧密钥数,然后Python脚本本身可以使用相关文本(帐户密钥好或坏)调用SNS。不需要在bash中执行任何操作。如果您真的想在bash中执行此操作,那么让Python脚本sys.exit()具有零(好)或非零(坏)值,您可以测试$?在shell脚本中。不要基于是否存在任意文本进行测试。
#!/bin/bash

python3 scripts_older_than_90days.py > oldkeys.csv
count=$?

if [ $count -eq 0 ]
then
  echo "All access keys good"
else
  echo "Count of old keys" $count
fi