[英]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所说的去做。
如果您坚持要做您所说的话,请考虑以下解决方案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.