繁体   English   中英

如何使用python执行erlang命令

[英]how to execute erlang command using python

我想执行一些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命令,但是由于某种原因而失败。 但是,我可以在启动shell时执行相同的命令,而无需使用python子进程。

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

Erlang不是一种脚本语言,它并非旨在执行而已而死。 Erlang是一项长期的任务,在您的示例中,与python代码进行通信的更好方法是使用Erlang提供的所有通信工具。

您的方法将遇到的另一个问题是关于竞争条件以及Erlang节点的无序输出。 Erlang不能保证所有进程的启动顺序。

在这种情况下,最好的方法是使用Erlang的互操作性工具。 可从Erlang官方文档中获得教程。 C节点,驱动程序和NIF是用C编写的,但是您可以轻松地使用端口将python脚本和erlang代码互连。

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

我认为您需要Erlang脚本 但是我不建议你这样做。 我认为您应该按照Mathieu Kerjouan所说的去做。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM