使用命令行参数在提交表格时运行脚本。

问题描述 投票:0回答:2

我有一个表单,在表单中输入一些参数,当表单提交时,表单参数会作为一个参数进入脚本。

但当我用脚本调用subprocess.call或subprocess.run时,它却抛出一个语法错误。

正确的语法是什么?

我必须运行像下面这样的脚本

python script.py --ar1=formlparameter1 --ar2=formlparameter2 --ar3=formlparameter3。

上面一行应该是一样的。

 import subprocess
    from django.contrib import messages
    def nboarding(request):
        if request.method == 'POST':
            form = NForm(request.POST, request.FILES)
            if form.is_valid():
                operation = form.cleaned_data['operation']
                partner = form.cleaned_data['partner']
                file = form.cleaned_data['file']

                output = script_function(operation, partner, file) 
                messages.success(request, '%s Successfully...' %operation)
                return redirect('nboarding')
                #messages.success(request, success_message, extra_tags='safe')
                #return redirect('/xxx')

        else:
            form = NForm()
        context = {
            'form': form,
            'menu_device':'active',
            'submenu_nboarding':'active',
        }
        return render(request, 'monitor/nboarding_form.html', context=context)


    def script_function(operation, partner, file):
        #--operation = operation,    --partner = partner,   --filepath = file 
        return subprocess.call(['python', '/path/to/script.py', operation '--partner' = partner '--filepath' = file], shell=False, timeout=1800)

如何使用正确的语法来运行这个程序?return subprocess.call(['python', 'pathtoscript.py', operation '--partner' = partner '--filepath' = file], shell=False, timeout=1800)

谢谢你

python django django-forms subprocess call
2个回答
-1
投票

这时你不能做以下操作,因为文件还没有保存,所以你的文件在文件系统中还不存在,在这种情况下,它还只是暂时的 InMemoryUploadedFile (存在服务器RAM内存中)

你必须先调用表格上的.save()方法(将其与数据库中的其他模型数据一起保存到文件系统中),然后获取路径。

model = form.save()

# path -> model.file.path
© www.soinside.com 2019 - 2024. All rights reserved.