调用Ruby脚本时发生意外的行为我有一个用于执行一些API调用/屏幕抓取的Ruby脚本,但我们的主要应用程序是在PHP中。我们的PHP应用程序使用shell_exec()来调用Ruby脚本。通过PHP的shell_exec()
ruby脚本在命令行中调用时效果很好,但在通过PHP的shell exec调用时,它会随机退出。
下面是Ruby脚本的例子:
#!/usr/bin/env ruby
require 'rubygems'
require 'mysql'
require 'net/http'
require 'open-uri'
require 'uri'
require 'cgi'
require 'fileutils'
# Bunch of code here ... works fine
somePath = 'http://foo.com/bar.php'
# Seems to always exit when I do a Net::HTTP or open-uri call
post = Net::HTTP.post_form(URI.parse(somePath),{'id'=>ID,'q'=>'some query'})
data = post.body
# OR
data = open(somePath).read
# More code here ...
所以,我只能到目前为止推断的是,它总是在离开时,我试图抓住/读通过网/ HTTP或开URI外部URL调用。我抓住的页面可以接受POST或GET请求,但它似乎退出了任何一种方式。
我在shell_exec调用后用PHP输出结果,但没有错误消息或退出。我的确有消息通过我的Ruby脚本在这里和那里用“puts ....”输出。这可能是一个问题(我想'不',因为它不会退出以前的投入消息)?
同样,从shell中调用它时它工作正常。这几乎就像shell_exec调用不会等待net/http调用完成。
任何想法?
proc_open与shell_exec有什么不同? – Callmeed