首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将python方法的返回值赋值给bash脚本中的变量

将python方法的返回值赋值给bash脚本中的变量
EN

Stack Overflow用户
提问于 2018-11-19 11:49:43
回答 1查看 2.3K关注 0票数 0

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

test.sh

代码语言:javascript
复制
#!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

代码语言:javascript
复制
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;

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-19 12:06:41

当你运行这个:

代码语言:javascript
复制
password_check=$(python password.py $password)

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

代码语言:javascript
复制
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脚本中检查该值:

代码语言:javascript
复制
#!bin/sh

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

请注意,Python不需要线上的终端;,所以,而不是:

代码语言:javascript
复制
return False;

你应该写:

代码语言:javascript
复制
return False

此外,在本例中,我们使用脚本的输出来确定成功/失败。一个稍微健壮的解决方案是使用脚本的退出代码。如果你在网上浏览一下,你可能会发现很多使用这种技术的例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53374040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档