从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"
fipassword.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;即使密码符合要求,也总是显示不正确。
发布于 2018-11-19 12:06:41
当你运行这个:
password_check=$(python password.py $password)您正在将password.py程序的输出分配给password_check变量。问题是您的password.py程序不产生任何输出:实际上,它甚至从不运行passwordCheck函数,因为您的passwordCheck脚本从不调用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此外,在本例中,我们使用脚本的输出来确定成功/失败。一个稍微健壮的解决方案是使用脚本的退出代码。如果你在网上浏览一下,你可能会发现很多使用这种技术的例子。
https://stackoverflow.com/questions/53374040
复制相似问题