【发布时间】:2016-05-06 12:25:54
【问题描述】:
所以我是 Python 的新手。我正在做一个登录表单,它将您重定向到在 linux 服务器中运行的 python 脚本以验证用户身份。我一次使用多个命令来查看用户是否在数据库中。 命令是 echo "$password" |登录 -p -h 192.0.. $user >/dev/null 2>&1 当我回显 $?如果它在数据库中则返回 0,否则返回 1。
在 python 脚本中我有这个:
import cgi,shlex,subprocess
form = cgi.FieldStorage()
params={}
for key in form.keys():
params[key]= form[key].value
user_name_variable=params['id']
password_variable=params['pwd']
command1="login -p -h 192.0. "+user_name_variable+" >/dev/null 2>&1"
command2="echo "+password_variable
command3="'echo $?'"
p1=subprocess.Popen(shlex.split(command2),shell=True,stdout=subprocess.PIPE)
p2=subprocess.Popen(shlex.split(command1),shell=True,stdin=p1.stdout, stdout=subprocess.PIPE)
p3=subprocess.Popen(shlex.split(command3),shell=True, stdin=p2.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
p2.stdout.close()
out, err= p3.communicate()[0]
即使输入错误,out 也始终为 0。我用 PIPE 做错了什么吗?我所知道的是,问题不在于我传递变量时,因为我得到了正确的变量。问题一定出在链上。我会很感激你的帮助。谢谢。
【问题讨论】:
标签: python linux subprocess popen