2016-09-01 25 views
4

所以,我真的得到了一個程序,使用劣質shell從SBCL Lisp運行(推測UIOP將會很好)。無論如何,現在我可以做到這一點,如果它在後臺運行,我仍然不知道如何與程序進行交互。Inferior Shell或UIOP:與後臺進程交互

所有這些功能(如管道和流連接到運行程序的標準輸入和標準輸出都會被公佈,只是沒有記錄)。看起來這是最基本的事情。

有沒有人有做這樣的事情的例子?

任何幫助表示讚賞。

-Todd

+1

這可能是一個太寬泛的問題。你有一個簡單的例子來展示嗎?哪些東西不符合您的預期? – Renzo

+0

@Renzo我理解它的方式:SBCL有'sb-ext:run-program',它可以讓你異步啓動進程並連接輸入和輸出流。然後,您可以在程序生命週期中使用流與它進行通信(例如,啓動'gnuplot'並保持它運行並使用相同的進程繪圖,而不是始終重新啓動它)。以便攜的方式,我只看到同步:啓動進程並傳遞啓動參數 - 等到它完成。 – mobiuseng

+0

['EAZY-PROCESS'](https://github.com/guicho271828/eazy-process)庫可以輕鬆創建管道和異步進程,但是故意不提供對流的支持。一切都基於文件和文件描述符。不過,您可以使用臨時文件。 – coredump

回答

1

你看過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

+1

是的。顯而易見的事情是使用sb-ext:run-program,但是我必須運行的命令行是這樣的:/ usr/bin/java -cp「*」-Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP - 註釋器tokenize,ssplit,pos,引理,ner,parse,dcoref -outputFormat text當然,這裏的問題是星號周圍的引號,當用反斜線轉義時。我試過用引用的參數運行其他Java程序,但它們也不工作。另外,感謝gnuplot的例子。我確實有這樣的要求! –