Erlang端口:与;wc"-喜欢这个节目吗?
我有一个外部exe程序,从标准输入读取数据并生成结果。它的工作原理类似于Erlang端口:与;wc"-喜欢这个节目吗?,erlang,cgi,Erlang,Cgi,我有一个外部exe程序,从标准输入读取数据并生成结果。它的工作原理类似于wc程序,一直读取到EOF。(更确切地说,是流的尽头。) 更新:让我再添加一条解释:我基本上是在尝试编写一个Erlang管道 我可以在批处理文件中调用该程序,如echo 339371249625 | LookupProj.exe,但我希望能够从Erlanggen_服务器向其传递数据 我已经看过了Erlang端口,但我很难让它们发挥好。以下是我所拥有的: test(InputText) -> P = open_p
wc
程序,一直读取到EOF。(更确切地说,是流的尽头。)
更新:让我再添加一条解释:我基本上是在尝试编写一个Erlang管道
我可以在批处理文件中调用该程序,如echo 339371249625 | LookupProj.exe
,但我希望能够从Erlanggen_服务器向其传递数据
我已经看过了Erlang端口,但我很难让它们发挥好。以下是我所拥有的:
test(InputText) ->
P = open_port({spawn, "/ExternEvent/LookupProj.exe"}, [stream, exit_status, use_stdio,
stderr_to_stdout, in, out]),
IBin = list_to_binary(InputText),
%% io:format("~p~n",[I2]),
P ! {self(), {command, <<IBin/binary, <<26>>/binary>>}}, %% ASCII 26 = EOF
P ! {self(), {eof}}, %% ERROR -- how to close stdin of the cat process?
receive B -> io:format("~p",[B]) end.
测试(输入文本)->
P=打开_端口({spawn,“/ExternEvent/LookupProj.exe”},[流,退出_状态,使用_stdio,
标准到标准输出,输入,输出],
IBin=列表到二进制(输入文本),
%%io:格式(“~p~n”,[I2]),
P{self(),{command,},%%ASCII 26=EOF
P{self(),{eof},%%错误--如何关闭cat进程的stdin?
接收B->io:format(“~p”,[B])结束。
我已尝试在open\u port
中使用eof
标志,但没有任何帮助。(不确定这是否是正确的标志?)
我哪里出错了?谢谢 如果我理解正确,您正在尝试在几个调用之间重复使用端口连接,例如echo 339371249625 | LookupProj.exe,但是关闭stdin的唯一方法实际上是使用关闭端口,因此所有围绕端口的舞蹈并不比使用启动命令好
如果您可以修改该LoopUpj.EXE,您希望在STDIN中考虑一些预定义的字节序列作为命令的结束,并且每次完成而不是EOF发送它。