python - 如何使用python执行erlang命令

标签 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(),但效果不佳。

最佳答案

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

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

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

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

关于python - 如何使用python执行erlang命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48294028/

相关文章:

c - 函数名称存储在 ARM7l 堆栈帧中的位置(不是链接寄存器 0x​​104567910 中的函数地址)

linux - 如何在 LINUX 中使用 iptables 阻止 ip 地址 24 小时

linux - 如果没有值,则在文件中添加零值。

python - 属性错误: module 'sqlalchemy.util' has no attribute 'deprecated_params'

python - 在 Pandas 中插入带有常量的列

linux - Linux下/sys/devices下创建文件

shell - 使用 shell 脚本获取最近 5 分钟内在 hadoop 中创建的文件

c - 为什么sigaction说键盘快捷键发送的信号来自PID 0?

python - 查找所有 tkinter 字体

Python 3 异步 : run_until_complete() blocks when waiting for ProcessPoolExecutor job done