我有一个简单的表单,用户输入其服务器的远程主机,用户名和密码。我在views.py中使用upload_file视图处理表单。我想使用用户提供的输入运行以下命令:
rsync --list-only username@serveraddress
要运行以下命令,用户必须键入密码,验证成功后,将列出该文件。我已经从用户输入密码,但我不知道如何使用它。在立即运行上述命令后,必须在终端中输入密码。如何在Django中实现相同的功能?这是我的views.py:
def upload_file(request):
if request.method == 'POST':
#session_name = request.POST.get['session']
url = request.POST.get('hostname', False)
username = request.POST.get('username', False)
source = str(username) + "@" + str(url)
command = subprocess.Popen(['rsync', '--list-only', source], stdout=subprocess.PIPE).communicate()[0]
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))
答案 0 :(得分:3)
我认为这个问题的标题有点过分,也许应该是“如何传递服务器密码......”。无论如何,如果我理解正确,你可以设置环境变量RSYNC_PASSWORD:
command = subprocess.Popen(['rsync', '--list-only', source],
stdout=subprocess.PIPE,
env={'RSYNC_PASSWORD': my_password}).communicate()[0]
请注意,环境变量可能对其他系统用户可见
如果这让你害怕,可以使用rsync选项--password-file
(参见rsync手册)
再多一点:通过指定env
调用者环境不再传递给rsync进程。