我想执行一些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()
,但效果不佳。
答案 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说。
如果你坚持做你说的话,请考虑以下解决方案: