如何使用python执行erlang命令

时间:2018-01-17 05:16:25

标签: python linux shell erlang

我想执行一些erlang命令,shell可以通过一些命令启动:

/ opt / myserver / bin / myserver remote_console

上面的命令将启动一个shell,我可以在其中执行erlang命令。我想从我的python脚本中做同样的事情。

我尝试使用子进程执行此操作,但这似乎没有用。

import shlex
from subprocess import Popen, PIPE

cmd = '/opt/myserver/bin/myserver remote_console'
proc = Popen(shlex.split(cmd), stdin=PIPE, stdout=PIPE, stderr=STDOUT)
er_cmd = web_api_handler:process_rfid(30001,<<“RC“>>,arg).
out = proc.communicate(input=er_cmd)

上面的方法执行erlang命令,但由于某种原因它失败了。但是,在不使用python子进程的情况下启动shell时,我能够执行相同的命令。

我尝试使用proc.stdin.write()然后使用proc.communicate(),但效果不佳。

2 个答案:

答案 0 :(得分:0)

Erlang不是一种脚本语言,它不是为了执行而设计的。 Erlang用于长期生活任务,在您的示例中,与python代码通信的更好方法是使用Erlang提供的所有通信工具。

您的方法遇到的另一个问题是竞争条件和Erlang节点的无序输出。 Erlang不保证所有进程的起始顺序。

在这种情况下,最好的方法是使用Erlang的互操作性工具。可以从Erlang Official Documentation获得教程。 C节点,驱动程序和NIF是用C语言编写的,但您可以轻松使用Ports来连接python脚本和erlang代码。

另一种可能性是使用本地unix套接字(自20版以来可用)并使用它与你的python脚本进行通信。

答案 1 :(得分:0)

我认为你需要Erlang Script。 但我不建议你这样做。我认为你应该这样做,Mathieu Kerjouan说。

如果你坚持做你说的话,请考虑以下解决方案:

  1. 将您的Erlang应用程序作为守护程序启动。
  2. 使用escript通过Erlang的rpc与您的应用程序进行通信。
  3. 控制python代码中的escript。