2009-05-07 16 views
5

Czy istnieje łatwy w użyciu mostek Ruby do Pythona? A może lepiej użyć systemu()?Jak mogę wywołać kod Pythona z Ruby?

+0

zadałem podobne pytanie tutaj wcześniej; Być może odpowiedzi byłyby pomocne: http://stackoverflow.com/questions/2413878/would-it-be-possible-tointegrate-python-or-perl-with-ruby. – Yktula

Odpowiedz

2

Nie sądzę, że istnieje sposób na wywołanie Pythona z Ruby bez rozwidlenia procesu, przez system() lub coś podobnego. Czasy uruchamiania wersji językowych są zupełnie różne, i tak musiałyby być w oddzielnych procesach.

+0

wywoływać procesy za pomocą modułu podprocesowego. system() bardzo brakuje, zabijmy bestię. – nosklo

6

Możesz spróbować Masaki Fukushima's library osadzania pythona w ruby, chociaż nie wydaje się być utrzymywany. YMMV

Dzięki tej bibliotece skrypty Ruby mogą bezpośrednio wywoływać dowolne moduły Pythona. Można użyć zarówno modułów rozszerzających, jak i modułów napisanych w języku Python.

zabawnie nazwany Unholy od pomysłowy Dlaczego Lucky Stiff może być również użyteczne:

kompilacji Ruby do kodu bajtowego Pythona.
A ponadto, przełożenie tej
bajtowego powrotem do Pythona kodu źródłowego stosując Decompyle (zawarte).

Wymaga Ruby 1,9 i Pyton 2.5.

+0

Nice. Nie słyszałem wcześniej o nieświętym. –

-1

Aby można było uruchomić kod Pythona, należy uruchomić interpreter jako proces. Zatem system() jest twoją najlepszą opcją.

Do wywołania kodu Pythona można użyć RPC lub gniazd sieciowych, ale dla najprostszej rzeczy, która mogłaby działać.

+0

Świetnie, właśnie to zamierzam zrobić. Nie widzisz żadnego powodu, aby być bardziej doświadczonym niż używając samego systemu(). – Eric

+2

Nie sądzę, że to prawda: zobacz http://docs.python.org/extending/embedding.html w celu dokumentacji osadzenia interpretera Pythona w innej aplikacji. Który dla perwersyjnego mógłby być tłumaczem Rubiego. –

0

Jeśli chcesz użyć kodu Pythona jak skrypt Pythona jest funkcją, spróbuj IO.popen.

Jeśli chcesz odwrócić każdy ciąg w tablicy używając skryptu pythonowego "reverse.py", Twój kod ruby ​​będzie wyglądał następująco.

strings = ["hello", "my", "name", "is", "jimmy"] 
#IO.popen: 1st arg is exactly what you would type into the command line to execute your python script. 
#(You can do this for non-python scripts as well.) 
pythonPortal = IO.popen("python reverse.py", "w+") 
pythonPortal.puts strings #anything you puts will be available to your python script from stdin 
pythonPortal.close_write 

reversed = [] 
temp = pythonPortal.gets #everything your python script writes to stdout (usually using 'print') will be available using gets 
while temp!= nil 
    reversed<<temp 
    temp = pythonPortal.gets 
end 

puts reversed 

Następnie skrypt Pythona będzie wyglądał jak ten

import sys 

def reverse(str): 
    return str[::-1] 

temp = sys.stdin.readlines() #Everything your ruby programs "puts" is available to python through stdin 
for item in temp: 
    print reverse(item[:-1]) #Everything your python script "prints" to stdout is available to the ruby script through .gets 
    #[:-1] to not include the newline at the end, puts "hello" passes "hello\n" to the python script 

Wyjście: olleh ym Eman si ymmij

+2

Autor szuka wywołania kodu Pythona z ruby, a nie kodu ruby ​​z Pythona. –

Powiązane problemy