我正在编写一个代码,该代码可以使用“管道”在Python和Ruby脚本之间发送数据,但无法使其正常工作。有什么建议或替代方法吗?
我编写了简单的脚本来使其运行并在其上进行构建。目的是在项目中集成“管道”功能。在该项目中,Python脚本将向Ruby脚本发送一个.txt文件,该脚本将提取参数值并将其存储在相应的数组中。然后,我想将数组发送回Python脚本。
到目前为止,我编写的简单脚本受https://www.decalage.info/python/ruby_bridge的启发。运行时,它将继续运行而不会停止并且不会产生任何结果。目标是将整数6发送到添加了5的Ruby脚本,然后将总和发送回Python脚本。用ctrl + c中止时,将编写以下内容:
File "./com_ruby.py", line 33, in <module>
sss = slave.stdout.readline().rstrip()
我的Python脚本:
from subprocess import Popen, PIPE, STDOUT
print('launching slave process...')
slave = Popen(['ruby', 'provar.rb'], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
while True:
num = bytes([6])
slave.stdin.write(num)
# result will be a list of lines:
result = []
# read slave output line by line, until we reach "[end]"
while True:
# check if slave has terminated:
if slave.poll() is not None:
print('slave has terminated.')
exit()
# read one line, remove newline chars and trailing spaces:
sss = slave.stdout.readline().rstrip()
print('line: ', sss)
if sss == '[end]':
break
result.append(sss)
print('result:')
print('\n'.join(result))
我的Ruby脚本:
while cmd = STDIN.gets
cmd.chop!
cmd = cmd + 5
cmd.to_s
print eval(cmd),"\n"
# append [end] so that master knows it's the last line:
print "[end]\n"
# flush stdout to avoid buffering issues:
STDOUT.flush
end
是否有更好,更简单的方法来在两个脚本之间进行数据“管道传输”?