Methods Plone外部方法与子流程Popen

Methods Plone外部方法与子流程Popen,methods,plone,external,Methods,Plone,External,我在Plone上有一个外部方法,它以这种方式调用子例程(另一个python脚本) output = subprocess.Popen("/usr/local/Plone4/zeocluster/products/xxx/Extensions/check_login.py", stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True, cwd='/') check_login.py导入一个模块,该模块未安装在Plone内部的python安

我在Plone上有一个外部方法,它以这种方式调用子例程(另一个python脚本)

output = subprocess.Popen("/usr/local/Plone4/zeocluster/products/xxx/Extensions/check_login.py", stdout=subprocess.PIPE,stderr=subprocess.PIPE, shell=True, cwd='/')
check_login.py导入一个模块,该模块未安装在Plone内部的python安装上。下面是check_login.py的示例代码:

#!/usr/bin/python


def login_ldap(username, password):
import ldap

conn = ldap.initialize(SERVER_URL)
conn.protocol_version = 3
conn.set_option(ldap.OPT_REFERRALS, 0)


login_ok = False 
if username and password: 
    try:
        conn.simple_bind_s(username, password)
        login_ok = True
    except ldap.INVALID_CREDENTIALS:
        pass           
return login_ok


if __name__ == '__main__':
import sys
args = sys.argv
if len(args) != 3:
    print "Usage: check_login <username> <password>"
else:
    username = args[1]
    password = args[2]
    print login_ldap(username, password),
#/usr/bin/python
def登录\u ldap(用户名、密码):
导入ldap
conn=ldap.initialize(服务器URL)
conn.protocol_version=3
conn.set_选项(ldap.OPT_引用,0)
登录\确定=错误
如果用户名和密码:
尝试:
连接简单绑定(用户名、密码)
login\u ok=True
除了ldap.U凭据无效外:
通过
返回登录\u确定
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
导入系统
args=sys.argv
如果len(args)!=三:
打印“用法:检查登录”
其他:
用户名=args[1]
密码=args[2]
打印登录名(用户名、密码),
如果我通过shell调用check_login.py,它就会正常工作。如果我用Plone中的子进程调用它,它会失败,并说:

'import site' failed; use -v for traceback
Traceback (most recent call last):
  File "/usr/local/Plone4/zeocluster/products/xxxx/Extensions/check_login.py", line 37, in <module>
 print login_ldap(username, password),
 File "/usr/local/Plone4/zeocluster/products/xxxx/Extensions/check_login.py", line 6, in login_ldap
import ldap
ImportError: No module named ldap
“导入站点”失败;使用-v进行回溯
回溯(最近一次呼叫最后一次):
文件“/usr/local/Plone4/zeocluster/products/xxxx/Extensions/check_login.py”,第37行,在
打印登录名(用户名、密码),
文件“/usr/local/Plone4/zeocluster/products/xxxx/Extensions/check_login.py”,第6行,在login_ldap中
导入ldap
ImportError:没有名为ldap的模块

我真的不知道为什么总是使用Plone的python而不是系统的python来执行check\u login.py

子进程从父进程继承操作系统环境,包括path等。Plone环境很可能已经修复,以某种方式使用Plone安装程序Python解释器

尝试:


。。强制使用系统Python

output=subprocess.Popen([“/usr/bin/python”,“/usr/local/Plone4/zeocluster/products/XXXX/Extensions/check_login.py”,member_id,password],stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=False)它仍然返回相同的错误:(.另外,我将check_login.py#!/usr/bin/python改为#!/usr/bin/env pythonThen还有其他错误,问题出了问题。当您尝试从命令行运行此脚本时,它会说什么?我通过SSH输入并键入“/usr/local/Plone4/zeocluster/products/xxx/Extensions/check_login.py用户名密码”并且正确地工作。
"/usr/bin/python", "/usr/local/Plone4/zeocluster/products/xxx/Extensions/check_login.py"