1

I am unable to pass server password with subprocess.Popen in Django. Here's my full views.py:

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))  

Here's the form that I take user input from:

<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>

What am I doing wrong? Password is not passed from environment_variable.

4

1 回答 1

1

您的代码(就在 中设置密码而言RSYNC_PASSWORD)是正确的。

我的结论是,您正在尝试使用 Rsync 中的不同模块(如 ssh)连接到服务器。在 ssh 的情况下,该RSYNC_PASSWORD变量不起作用

也许使用结构来执行命令是个好主意?尽管它不能解决您的密码问题,但它可以为您处理一些事情。如果您通过 ssh 连接,我建议您设置私钥身份验证。

有关通过 ssh 进行无密码 rsync 的更多信息,请参阅此问题:How to automatically rsync without ask for password prompt

于 2012-11-19T13:14:51.153 回答