我写了一个如下的Python脚本:
#!/usr/bin/python
import os, subprocess
env = os.environ.copy()
env['PASSWD'] = "hello jian"
retcode = subprocess.call("smbclient -L //10.60.1.11 -U Mikejian"),env=env)
print retcode
当我执行它时,它运行良好,获取的返回代码是0。你知道,我将密码作为环境变量传递,所以Python不会询问我密码。
一切正常。
现在,我想将这段代码移植到MoinMoin(一个Wiki引擎)的代码中。该代码位于名为User的类中,作为下面的一个函数。
def _validateSMBPassword(self, username, password):
debug("call _validateSMBPassword %s:%s " % (username, password))
import subprocess, os, shlex
cmd = "sudo smbclient -L //%(server)s -U %(user)s"
cmd = cmd % {
'server' : "10.60.1.11",
'user' : "Mikejian",
}
env = os.environ.copy()
env['PASSWD'] = "hello jian"
retcode = subprocess.call("smbclient -L //10.60.1.11 -U Mikejian",env=env,shell=True)
debug("retcode:%d" % retcode)
if retcode == 0:
return True, True
return False, False
在这种情况下,我总是得到的返回码是1而不是0,似乎环境变量PASSWD没有传递。你能告诉我为什么吗?有什么解决方案建议吗?