首页 > 解决方案 > 将python方法的返回值分配给bash脚本中的变量

问题描述

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

测试.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

密码.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;

即使密码符合要求,它总是显示不正确。

标签: python-2.7shell

解决方案


当你运行这个:

password_check=$(python password.py $password)

您正在将程序的输出分配变量。问题是你的程序没有产生任何输出:事实上,它甚至从不运行函数,因为你的 Python 脚本从不调用. 务必按照您尝试使用脚本的方式进行操作,您需要将其修改为 (a) 实际调用该方法和 (b) 打印输出而不是ing 值:password.pypassword_checkpassword.pypasswordCheckpasswordCheckpasswordCheckreturn

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

此外,在此示例中,我们使用脚本的输出来确定成功/失败。一个稍微更健壮的解决方案是改用脚本的退出代码。如果您在线探索一下,您可能会找到使用此技术的各种示例。


推荐阅读