我有一个表单,在表单中输入一些参数,当表单提交时,表单参数会作为一个参数进入脚本。
但当我用脚本调用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)
谢谢你
这时你不能做以下操作,因为文件还没有保存,所以你的文件在文件系统中还不存在,在这种情况下,它还只是暂时的 InMemoryUploadedFile
(存在服务器RAM内存中)
你必须先调用表格上的.save()方法(将其与数据库中的其他模型数据一起保存到文件系统中),然后获取路径。
model = form.save()
# path -> model.file.path