dsp*_*099 30 ruby python rake ruby-on-rails heroku
我有一个程序,它有一个小的文件结构,然后运行使用
python do_work.py foo bar
Run Code Online (Sandbox Code Playgroud)
我希望我的Rails用户按下按钮并为他们发生这种情况,结果要么上传到某个地方,要么只是作为下载链接或类似的东西抛出 - 输出do_work.py(比方说,它result.txt)
我还想澄清一下,脚本会在文件系统上创建3个独立的文件,这些文件不是文本文件(这应该不重要,这里不是问题)
最好的方法是什么?可以rake运行exec Python吗?更重要的是,这在heroku上是可行的吗?
我在我的系统上安装了Python,但sockmonk提供的答案似乎不起作用 - 它返回nil.请注意,其他命令ls似乎有效.
这可能是权限问题吗?
def index
value = %x( python --version )
render :text => value
end
Run Code Online (Sandbox Code Playgroud)
顺便说一句,尝试这个irb:
%x(python)
Run Code Online (Sandbox Code Playgroud)
打开irb的Python终端INSIDE.然而,无论出于何种原因,它都不会占用.
uta*_*ngo 26
您的index方法不起作用,因为python --version它的版本输出到STDERR,而不是STDOUT.如果您不需要分离这些流,您可以将STDERR重定向到STDOUT:
value = %x(python --version 2>&1)
Run Code Online (Sandbox Code Playgroud)
此调用是同步的,因此在运行script(python do_work.py foo bar 2>&1)之后,您应该能够读取它生成的文件.
如果脚本由于某种原因无法创建文件,您现在将在value变量中看到异常,因为错误消息通常会发送到STDERR.
如果要将STDERR与STDOUT分开,请使用Open3模块.
请注意脚本需要一些时间才能运行,因此调用可能会重叠.我会在这里使用一个队列来防止这种情况.
并且不要忘记检查用户输入的数据.永远不要将它直接传递给脚本.