所以,我真的得到了一个程序,使用劣质shell从SBCL Lisp运行(推测UIOP将会很好)。无论如何,现在我可以做到这一点,如果它在后台运行,我仍然不知道如何与程序进行交互。Inferior Shell或UIOP:与后台进程交互
所有这些功能(如管道和流连接到运行程序的标准输入和标准输出都会被公布,只是没有记录)。看起来这是最基本的事情。
有没有人有做这样的事情的例子?
任何帮助表示赞赏。
-Todd
所以,我真的得到了一个程序,使用劣质shell从SBCL Lisp运行(推测UIOP将会很好)。无论如何,现在我可以做到这一点,如果它在后台运行,我仍然不知道如何与程序进行交互。Inferior Shell或UIOP:与后台进程交互
所有这些功能(如管道和流连接到运行程序的标准输入和标准输出都会被公布,只是没有记录)。看起来这是最基本的事情。
有没有人有做这样的事情的例子?
任何帮助表示赞赏。
-Todd
你看过SBCL手册吗?对于RUN-PROGRAM
的选项都记录有: http://www.sbcl.org/manual/#Running-external-programs
我想你只需要创建流,并通过:input
,:output
和:error
参数它们传递到RUN-PROGRAM
。
这里是一个例子,我给RUN-PROGRAM
流参数执行gnuplot
(虽然我没有离开输入流打开,因为你想)。 https://github.com/belambert/cl-gnuplot/blob/master/src/gnuplot.lisp#L18
是的。显而易见的事情是使用sb-ext:run-program,但是我必须运行的命令行是这样的:/ usr/bin/java -cp“*”-Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP - 注释器tokenize,ssplit,pos,引理,ner,parse,dcoref -outputFormat text当然,这里的问题是星号周围的引号,当用反斜线转义时。我试过用引用的参数运行其他Java程序,但它们也不工作。另外,感谢gnuplot的例子。我确实有这样的要求! –
这可能是一个太宽泛的问题。你有一个简单的例子来展示吗?哪些东西不符合您的预期? – Renzo
@Renzo我理解它的方式:SBCL有'sb-ext:run-program',它可以让你异步启动进程并连接输入和输出流。然后,您可以在程序生命周期中使用流与它进行通信(例如,启动'gnuplot'并保持它运行并使用相同的进程绘图,而不是始终重新启动它)。以便携的方式,我只看到同步:启动进程并传递启动参数 - 等到它完成。 – mobiuseng
['EAZY-PROCESS'](https://github.com/guicho271828/eazy-process)库可以轻松创建管道和异步进程,但是故意不提供对流的支持。一切都基于文件和文件描述符。不过,您可以使用临时文件。 – coredump