我写了一个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
当我执行它时,它工作正常,得到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
在这种情况下,我总是得到retcode是1,而不是0,似乎env没有超过PASSWD环境变量。
你能告诉我为什么吗?还有任何解决方案的建议?
答案 0 :(得分:0)
我可以无耻地建议pysmbclient
吗?这是我写的在工作中替换一些shell脚本的肮脏黑客,但它对我来说很好。
>>> smb = smbclient.SambaClient(server="MYSERVER", share="MYSHARE",
... username='foo', password='bar', domain='baz')
...
>>> print smb.listdir("/")
[u'file1.txt', u'file2.txt']
>>> f = smb.open('/file1.txt')
>>> data = f.read()
>>> f.close()
>>> smb.rename(u'/file1.txt', u'/file1.old')