Call Rails 4 param in Python script
我尝试在Python脚本中使用来自Rails控制器的表单输入。我的Rails(4.2.1版)应用程序中有一个接受URL的表单,然后我想在Python脚本中使用该URL。我不熟悉Rails,也不知道该怎么做。我的应用程序已经可以接受表单输入并在页面上呈现它们,还可以调用一个python脚本并运行它,但是我需要将它们链接在一起。
以下是迄今为止的控制器代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class ContestsController < ApplicationController def index value = %x(python /Users/my/Desktop/rails_test.py 2>&1) render :text => value @contests = Contest.all end def new @contest = Contest.new end def create @contest = Contest.new(contest_params) if @contest.save redirect_to contests_url else render 'new' end end private def contest_params params.require(:contest).permit(:site, :contest_url) end end |
我的python
1 2 3 4 5 | #!/bin/bash print"Python script works!" #url = last :contest_url param from rails app #print url |
试试"1":
我将Rails代码修改为:
1 | value = %x(python /Users/jdesilvio/Desktop/rails_test.py #{Shellwords.escape(params[:contest_url])} 2>&1) |
我将python脚本修改为:
1 2 3 4 5 6 | #!/Users/me/anaconda/bin/python2.7 python import sys print"Python script works!" print"Url:", sys.argv[1] |
输出是:
1 | Python script works! Url: |
我的形式是:
1 2 3 4 5 6 7 8 9 10 11 | <%= form_for @contest do |f| %> <%= f.label :site %> <%= f.text_field :site %> <%= f.label :contest_url %> <%= f.text_field :contest_url %> <%= f.submit %> <% end %> |
你可以把它们作为命令行参数传递给你的脚本。
1 | value = %x(/Users/my/Desktop/rails_test.py #{Shellwords.escape(params[:site])} #{Shellwords.escape(params[:contest_url])} 2>&1) |
然后让您的python脚本通过stdin读取值
1 2 3 4 5 | #!/usr/bin/env python import sys print"Site:", sys.argv[1] print"Url:", sys.argv[2] |
我让您的python脚本shebang调用