मैं कैसे एक कार्यक्रम के उत्पादन में धारा मैं RUN-PROGRAM
के साथ शुरू तो यह किसी अन्य प्रोग्राम के इनपुट के रूप में इस्तेमाल किया जा सकता का उपयोग करने के यह पता लगाने की कोशिश कर रहा हूँ RUN-PROGRAM
(अर्थात, नैतिक और शायद शाब्दिक पाइपिंग के समकक्ष) के साथ शुरू कर दिया। मैंने :INPUT
, :OUTPUT
और :WAIT
कीवर्ड तर्कों के कई संयोजनों का उपयोग करने का प्रयास किया है, लेकिन अब तक मैंने पर कुछ भी उत्पादक नहीं किया है। कोई सुझाव उपयोगी होगा; उदाहरण के लिए, मैं खोल से ls | grep lisp
जैसे कुछ करने के बारे में कैसे जाउंगा?स्टील बैंक आम लिस्प में इनपुट और आउटपुट स्ट्रीम को कैसे संसाधित करें?
मेरे प्रयासों में से एक
(defun piping-test()
(let ((grep-process (run-program "/usr/bin/grep" '("lisp")
:input :stream
:output :stream)))
(unwind-protect
(with-open-stream (s (process-input grep-process))
(let ((ls-process (run-program "/bin/ls" '()
:output s)))
(when ls-process
(unwind-protect
(with-open-stream (o (process-output grep-process))
(loop
:for line := (read-line o nil nil)
:while line
:collect line))
(process-close ls-process)))))
(when grep-process (process-close grep-process)))))
एक कीचड़ आरईपीएल में यह चल रहा है जब तक मैं C-c C-c
साथ तोड़ने, तो यह बहुत स्पष्ट रूप से सही बात नहीं है लटका सब कुछ का कारण बनता है, लेकिन मैं यकीन है कि कैसे नहीं कर रहा हूँ इसे बदलने के लिए यह सही बात है।
संपादित करें: दोनों RUN-PROGRAM
आमंत्रण को :WAIT NIL
जोड़ा जा रहा है, या grep
के लिए ही मंगलाचरण के लिए, चाल नहीं करता है। उस स्थिति में, फ़ंक्शन लटका होगा, और C-c C-c
के साथ तोड़ने से एक स्टैक ट्रेस मिलता है जो दर्शाता है कि एक स्थानीय फ़ंक्शन (FLET
के माध्यम से परिभाषित किया गया है) जिसे SB-UNIX:SELECT
कहा जाता है।