Python和Ruby之间的管道

时间:2019-03-27 12:34:02

标签: python ruby python-3.x pipe

我正在编写一个代码,该代码可以使用“管道”在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

是否有更好,更简单的方法来在两个脚本之间进行数据“管道传输”?

0 个答案:

没有答案