将python方法的返回值分配给bash脚本中的变量

时间:2018-11-19 11:49:44

标签: python-2.7 shell

从shell脚本中,我正在执行python程序。我试图将python的返回值分配给shell脚本中的变量,并在if else条件下比较此变量。我不知道我在代码或语法上哪里犯了错误。请帮助我获得正确的输出。

test.sh

#!bin/sh
#!/usr/bin/python2.7
password="Testing@2134testing"
password_check=$(python password.py $password)
if [ "$password_check" == "True" ];then
    echo "Correct"
else
    echo "Incorrect"
fi

password.py

import re, sys
password = sys.argv[1]
def passwordCheck():
       if re.match(r'(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}', password):
            return True;
       else:
            return False;

即使密码符合要求,也始终显示不正确。

1 个答案:

答案 0 :(得分:0)

运行此命令时:

password_check=$(python password.py $password)

您正在将password.py程序的输出分配给password_check变量。问题是您的password.py程序不会产生任何输出:实际上,它甚至不会运行passwordCheck函数,因为您的Python脚本从不调用passwordCheck。按照您尝试使用脚本的方式进行工作,您需要将其修改为(a)实际调用passwordCheck方法和(b)打印输出,而不是return赋值:

import re, sys
password = sys.argv[1]
def passwordCheck():
    if re.match(r'(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}', password):
        print 'okay'
        return True
    else:
        print 'fail'
        return False

passwordCheck()

然后在您的shell脚本中检查该值:

#!bin/sh

password="Testing@2134testing"
password_check=$(python password.py $password)
if [ "$password_check" == "okay" ];then
    echo "Correct"
else
    echo "Incorrect"
fi

请注意,Python不需要在线的终端;,因此, 的:

return False;

您应该写:

return False

此外,在此示例中,我们使用脚本的 output 确定成功/失败。一个更强大的解决方案是 请使用脚本的退出代码。您可能会找到一个 如果您在网上探索了使用此技术的各种示例, 位。