我试图将Django中的views.py文件中的值传入我编写的另一个python脚本中,但我不知道该怎么做。这是来自views.py文件的代码:
def get_alarm_settings(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
alarm = Alarm.objects.all()[0].alarm_setting
response = HttpResponse(alarm, content_type='text/plain')
response_a = execfile('alarm_file.py')
return response_a
我正在尝试将响应传递给alarm_file.py,有人知道该怎么做吗?
答案 0 :(得分:6)
根据问题的评论,在alarm_file.py中创建函数并导入它。要使python alarm_file.py
调用同样,请使用if __name__ == '__main__':
alarm_file.py。它将包含在调用python alarm_file.py
时运行的逻辑。此外,您可以使用sys.argv
获取参数,并在命令行中传递。例如:
alarm_file.py:
import sys
def do_something(val):
# do something
print val
# return something
return val
if __name__ == '__main__':
try:
arg = sys.argv[1]
except IndexError:
arg = None
return_val = do_something(arg)
这将确保您可以简单地运行:python alarm_file.py some_argument
在您的视图中,只需从alarm_file导入函数并使用它:
from alarm_file import do_something
...
response = HttpResponse(alarm, content_type='text/plain')
response_a = do_something(response)
return response_a
答案 1 :(得分:0)
您可以使用流程响应中间件来处理从view方法返回的响应,更多详细信息可以在此处找到https://docs.djangoproject.com/en/dev/topics/http/middleware/#process-response
答案 2 :(得分:0)
你不能使用execfile()传递参数,如果你想调用另一个解释器实例并运行脚本,你应该使用subprocess.popen (suprocess docs)
这样的事情: subprocess.Popen(['alarm_file.py','arg1',...],...,shell = True)
答案 3 :(得分:0)
我建议您使用 Subprocess 模块的 Popen 方法。
例如:
process = Subprocess.Popen(['python','alarm_file.py','arg1','arg2'], stdout=PIPE, stderr=STDOUT)
output = process.stdout.read()
exitstatus = process.poll()
在此示例中,脚本的stderr和stdout保存在变量' output '中,脚本的退出代码保存在变量' exitstatus '中。 / p>
您可以参阅我的博客以获取详细说明>>