python-2.7 - 将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;
即使密码符合要求,它总是显示不正确。
解决方案
当你运行这个:
password_check=$(python password.py $password)
您正在将程序的输出分配给变量。问题是你的程序没有产生任何输出:事实上,它甚至从不运行函数,因为你的 Python 脚本从不调用. 务必按照您尝试使用脚本的方式进行操作,您需要将其修改为 (a) 实际调用该方法和 (b) 打印输出而不是ing 值:password.py
password_check
password.py
passwordCheck
passwordCheck
passwordCheck
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
此外,在此示例中,我们使用脚本的输出来确定成功/失败。一个稍微更健壮的解决方案是改用脚本的退出代码。如果您在线探索一下,您可能会找到使用此技术的各种示例。