2012-11-19 43 views
1

我無法通過Django中的subprocess.Popen傳遞服務器密碼。這裏是我的全views.py:無法通過Django中的Popen傳遞服務器密碼?

from django.shortcuts import render_to_response 
from django.template import RequestContext 
import subprocess 

def upload_file(request): 
    '''This function produces the form which allows user to input session_name, their remote host name, username 
    and password of the server. User can either save, load or cancel the form. Load will execute couple Linux commands 
    that will list the files in their remote host and server.''' 

    if request.method == 'POST':  
     # session_name = request.POST['session'] 
     url = request.POST['hostname'] 
     username = request.POST['username'] 
     global password 
     password = request.POST['password'] 
     global source 
     source = str(username) + "@" + str(url) 

     command = subprocess.Popen(['rsync', '--list-only', source], 
          stdout=subprocess.PIPE, 
          env={'RSYNC_PASSWORD': password}).communicate()[0] 

     result1 = subprocess.Popen(['ls', '/home/zurelsoft/R'], stdout=subprocess.PIPE).communicate()[0] 
     result = ''.join(result1) 
     return render_to_response('thanks.html', {'res':result, 'res1':command}, context_instance=RequestContext(request)) 

    else: 
     pass 
    return render_to_response('form.html', {'form': 'form'}, context_instance=RequestContext(request)) 

下面是我從用戶輸入表單:

<fieldset> 
      <legend>Session</legend> 
       <label for="input-one" class="float"><strong>Session Name:</strong></label><br /> 
       <input class="inp-text" name="session" id="sess" type="text" size="30" /><br /> 

       <label for="input-two" class="float"><strong>RemoteHost:</strong></label><br /> 
       <input class="inp-text" name="hostname" id="host" type="text" size="30" /> 

       <label for="input-three" class="float"><strong>Username:</strong></label><br /> 
       <input class="inp-text" name="username" id="user" type="text" size="30" /> 

       <label for="input-four" class="float"><strong>Password:</strong></label><br /> 
       <input class="inp-text" name="password" id="pass" type="password" size="30" /> 
     </fieldset> 

我在做什麼錯?密碼不會從environment_variable傳遞。

+0

你能告訴你更多的視圖代碼?你錯過了一些重要的線路 – Wolph

+0

完成。請檢查問題。 – sachitad

+0

'全局密碼'部分是一個不錯的主意imho。使用全局變量通常是一個壞主意,但對於密碼來說可能相當危險。 – Wolph

回答

1

您的代碼(至於設置密碼RSYNC_PASSWORD)是正確的。

我的結論是,你試圖連接到一個服務器與Rsync中不同的模塊,如ssh。在ssh的情況下RSYNC_PASSWORD變量確實不是的工作。

對於命令執行,使用fabric也許是個好主意?它可以爲你處理一些事情,雖然它不能解決你的密碼問題。如果你通過ssh連接,我建議設置私鑰認證。

請參閱通過SSH密碼的上rsync的更多信息這個問題:How to automate rsync without asking for password prompt

+0

謝謝你的回答。正如你所看到的,我沒有使用ssh連接到服務器。 Rsync將我連接到服務器並傳輸文件。我如何解決我的問題? – sachitad

+0

@sachitad:你有遠程服務器上運行的rsync服務器嗎?如果不是,那很可能你確實在使用ssh。默認情況下,rsync在連接到遠程系統時使用ssh。 – Wolph

+0

我明白了。什麼可能是解決我的問題的解決方案? – sachitad