2011-02-16 6 views
4

を渡す:サブプロセス呼び出しのENV私は怒鳴るよう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エンジン)コードにこのコードを移動したいです。これはユーザーという名前のクラスで、この場合は

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ではない、ENVは、PASSWD環境変数を過ぎていないと思われました。

なぜあなたに教えてください。

+0

MoinMoinの中で、あなたのコードを実行するので、もし、あなたがMoinMoinのは、実際にあなたが期待している環境を得ることを確認する必要がありますか?パスワードの受け渡しは、セキュリティを含む多くの理由からひどい考えです。 –

答えて

0

シャムレシーでpysmbclientを提案できますか?それは私が仕事でいくつかのシェルスクリプトを置き換えるために書いた汚れたハックですが、それは私のためにうまくいきます。どのようにMoinMoinのを開始しました:Envのは、プロセス内で渡される

>>> 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') 
+0

ありがとう、アクセスファイルやリストファイルは私の目的ではない、私はちょうどデフォルトのユーザー/パスワードを使用してローカルMoinMoin wiki.youソースコードのメカニズムを確認する代わりに、ユーザーとパスワードを確認するためにWindowsサーバーを使用したい。 – mike

+0

@mike:ええ、私は認証情報を安全に渡すための 'smbclient'推奨の認証ファイルを使用しています。 'pysmbclient'を使ってユーザー名/パスワードを確認することもできます。 – nosklo

関連する問題