Ruby on rails 如何从ruby方法获取执行的python脚本的输出
我正在尝试从ruby方法运行python脚本。我在Rails应用程序中将此方法作为rake任务运行。我正在使用上述解决方案: 编辑:此功能: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
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