Erlang端口:与;wc"-喜欢这个节目吗?

Erlang端口:与;wc"-喜欢这个节目吗?,erlang,cgi,Erlang,Cgi,我有一个外部exe程序,从标准输入读取数据并生成结果。它的工作原理类似于wc程序,一直读取到EOF。(更确切地说,是流的尽头。) 更新:让我再添加一条解释:我基本上是在尝试编写一个Erlang管道 我可以在批处理文件中调用该程序,如echo 339371249625 | LookupProj.exe,但我希望能够从Erlanggen_服务器向其传递数据 我已经看过了Erlang端口,但我很难让它们发挥好。以下是我所拥有的: test(InputText) -> P = open_p

我有一个外部exe程序,从标准输入读取数据并生成结果。它的工作原理类似于
wc
程序,一直读取到EOF。(更确切地说,是流的尽头。)

更新:让我再添加一条解释:我基本上是在尝试编写一个Erlang管道

我可以在批处理文件中调用该程序,如
echo 339371249625 | LookupProj.exe
,但我希望能够从Erlang
gen_服务器向其传递数据

我已经看过了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发送它。