Я пишу код, который может передавать данные между Python и скриптом Ruby, используя «конвейер», но не может заставить его работать. Любые рекомендации или альтернативные способы?
Я написал простые сценарии, чтобы заставить его работать и опираться на них. Цель состоит в том, чтобы интегрировать функциональность «конвейера» в проект. В проекте скрипт Python должен отправить файл .txt в скрипт Ruby, который извлечет значения параметров и сохранит их в соответствующих массивах. Затем я хочу отправить массивы обратно в скрипт Python.
Простые скрипты, которые я создал до сих пор, вдохновлены https://www.decalage.info/python/ruby_bridge. При запуске он продолжается без остановки и не дает никаких результатов. Цель состоит в том, чтобы отправить целое число 6 в скрипт Ruby, в который добавлено 5, и отправить сумму обратно в скрипт 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
Есть ли лучший, но простой способ сделать "передачу данных" между двумя сценариями?