私はporcelain moduleでElixirからinteropを行う方法を学ぼうとしています。PythonスクリプトにElixir磁器を使ってメッセージを送る方法は?
だから私はこの単純な例作られた:
私はこのようになりますエリクサー機能を持っている:
defmodule PythonMessenger do
alias Porcelain.Process, as: Proc
alias Porcelain.Result
def test_messages do
proc = %Proc{pid: pid} =
Porcelain.spawn_shell("python ./python_scripts/reply_to_elixir.py",
in: :receive, out: {:send, self()})
Proc.send_input(proc, "Greetings from Elixir\n")
data = receive do
{^pid, :data, :out, data} -> data
end
IO.inspect data
Proc.send_input(proc, "Elixir: I heard you said \"#{data}\"\n")
data = receive do
{^pid, :data, data} -> data
end
IO.inspect data
Proc.send_input(proc, "Please quit\n")
data = receive do
{^pid, :data, data} -> data
end
IO.inspect data
end
end
とこのようになりますPythonスクリプト:
import sys
while 1:
line = sys.stdin.readline()
if "quit" in line:
print("Quitting, bye for now")
sys.exit()
print(line)
が、これを動作しません。 Pythonスクリプトは決して終了しません。 のような読みちょうど1行場合:
line = sys.stdin.readline()
は、それだけで正常に動作します。
だから問題は何ですか?
ない、それ自体が答えはいますが、アーランの外部ターム・フォーマットを見てみたいことがあります。件名に関するこのQ&Aをご覧ください:http://stackoverflow.com/questions/5050758/erlang-interface-to-python –
erlportsパッケージでは、ただの文字列。 http://erlport.org/ –
ありがとう、erlportはこれのために磁器よりはるかに良い選択肢と思われます。 –