Ruby on rails 如何从ruby方法获取执行的python脚本的输出

Ruby on rails 如何从ruby方法获取执行的python脚本的输出,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试从ruby方法运行python脚本。我在Rails应用程序中将此方法作为rake任务运行。我正在使用上述解决方案: 编辑:此功能: output = `python2 #{path}/parse.py` EDIT2: 使用python脚本,我试图将字典列表传递给ruby函数。python脚本类似于: import xml.etree.ElementTree as ET import json def parse(): tree = ET.parse('respons

我正在尝试从ruby方法运行python脚本。我在Rails应用程序中将此方法作为rake任务运行。我正在使用上述解决方案:

编辑:此功能:

    output = `python2 #{path}/parse.py`
EDIT2: 使用python脚本,我试图将字典列表传递给ruby函数。python脚本类似于:

import xml.etree.ElementTree as ET
import json

def parse():
    tree = ET.parse('response.xml')
    root = tree.getroot()
    namespaces = {'resp': 'urn:ebay:apis:eBLBaseComponents'}
    order_array = root.find("resp:OrderArray", namespaces=namespaces)
    detailsList = []
    for condition:
        details["key1"] = value1
        details["key2"] = value2
    detailsList.append(details)
    output = json.dumps(detailsList)
    return output

print parse()

有人能解释一下我做错了什么,我该如何解决这个问题吗。谢谢

您在shell上调用了这一行:

"python2 -path- /parse.py"
shell将其解释为单个命令:
python2
(末尾有一个空格

尝试使用字符串插值,该操作可与backtick运算符一起使用:

output = `python2 #{path}/parse.py`

您正在调用shell上的这一行:

"python2 -path- /parse.py"
shell将其解释为单个命令:
python2
(末尾有一个空格

尝试使用字符串插值,该操作可与backtick运算符一起使用:

output = `python2 #{path}/parse.py`

您正在调用shell上的这一行:

"python2 -path- /parse.py"
shell将其解释为单个命令:
python2
(末尾有一个空格

尝试使用字符串插值,该操作可与backtick运算符一起使用:

output = `python2 #{path}/parse.py`

您正在调用shell上的这一行:

"python2 -path- /parse.py"
shell将其解释为单个命令:
python2
(末尾有一个空格

尝试使用字符串插值,该操作可与backtick运算符一起使用:

output = `python2 #{path}/parse.py`

想象一下键入这个精确的字符串:

"python2 " + path + "/parse.py"
进入你的外壳(例如bash)。它将寻找一个名为“python2”的程序,并给它四个参数

+
path
+
/parse.y

不能将任意Ruby代码放在反勾选字符串中,就像不能将任意代码放在普通字符串中一样。您必须使用字符串插值。

想象一下键入这个精确的字符串:

"python2 " + path + "/parse.py"
进入你的外壳(例如bash)。它将寻找一个名为“python2”的程序,并给它四个参数

+
path
+
/parse.y

不能将任意Ruby代码放在反勾选字符串中,就像不能将任意代码放在普通字符串中一样。您必须使用字符串插值。

想象一下键入这个精确的字符串:

"python2 " + path + "/parse.py"
进入你的外壳(例如bash)。它将寻找一个名为“python2”的程序,并给它四个参数

+
path
+
/parse.y

不能将任意Ruby代码放在反勾选字符串中,就像不能将任意代码放在普通字符串中一样。您必须使用字符串插值。

想象一下键入这个精确的字符串:

"python2 " + path + "/parse.py"
进入你的外壳(例如bash)。它将寻找一个名为“python2”的程序,并给它四个参数

+
path
+
/parse.y
不能将任意Ruby代码放在反勾选字符串中,就像不能将任意代码放在普通字符串中一样。必须使用字符串插值。

执行此操作时:

output = `python2 #{path}/parse.py`
output
将被分配python脚本的标准输出,但该脚本没有向标准输出写入任何内容;作为
parse()
调用返回值的json数据被简单地丢弃。您似乎期望脚本的执行有一个“返回值”,即脚本最后一个表达式的返回值,但这不是进程的工作方式

执行以下操作时,您可能希望将脚本末尾的
parse()
调用替换为
print parse()

output = `python2 #{path}/parse.py`
output
将被分配python脚本的标准输出,但该脚本没有向标准输出写入任何内容;作为
parse()
调用返回值的json数据被简单地丢弃。您似乎期望脚本的执行有一个“返回值”,即脚本最后一个表达式的返回值,但这不是进程的工作方式

执行以下操作时,您可能希望将脚本末尾的
parse()
调用替换为
print parse()

output = `python2 #{path}/parse.py`
output
将被分配python脚本的标准输出,但该脚本没有向标准输出写入任何内容;作为
parse()
调用返回值的json数据被简单地丢弃。您似乎期望脚本的执行有一个“返回值”,即脚本最后一个表达式的返回值,但这不是进程的工作方式

执行以下操作时,您可能希望将脚本末尾的
parse()
调用替换为
print parse()

output = `python2 #{path}/parse.py`
output
将被分配python脚本的标准输出,但该脚本没有向标准输出写入任何内容;作为
parse()
调用返回值的json数据被简单地丢弃。您似乎期望脚本的执行有一个“返回值”,即脚本最后一个表达式的返回值,但这不是进程的工作方式



您可能想将脚本末尾的
parse()
调用替换为
print parse()

您可以直接在命令行上运行它吗?@thorstenmüller:是的,python脚本可以从命令行正常执行脚本的输出可能不会发送到stdout?这可能吗?不,类似于parse.pyOK最后一行中的
print parse()
,所以现在您已经将这个问题缩小为python程序中的一个问题。它不再是关于Ruby的。我想你应该在这个网站上问一个新问题,这就是Python。显示完整程序、实际输出和预期输出。您可能只是错误地使用了Python JSON库。如果Ruby要解析JSON,那么Python应该直接输出JSON,而不是试图解析它,这看起来像是转储可能正在做的事情。据我所知,没有理由在Python和Ruby端解析JSON。你能直接在命令行上运行它吗?@thorstenmüller:是的,Python脚本在命令行上执行良好脚本的输出可能不会发送到stdou