пятница, 4 июня 2010 г.

iolib.process

Давно хотел, но то времени не было, то мотивация подводила, и вот вчера звёзды совпали и я написал iolib.process - очень простую библиотеку для создания дочерних процессов и взаимодействия с ними через стандартные потоки ввода/вывода. Её можно рассматривать как не зависимую от реализации альтернативу sb-ext:run-programm - реализация полностью выполнена на основе возможностей библиотеки iolib. По дизайну она существенно отличается от sb-ext:run-programm, которая представляется мне излишне запутанной: sb-ext:run-programm это, конечно, крутая вещь, но мне не очень понятны потребности человека, которые её разрабатывал. iolib.process требует git-версию iolib и должна работать, в принципе, на любых UNIX-системах. Можно было бы сделать и windows-версию (я писал когда-то соответствующий код на C++), но iolib не содержит необходимый инфраструктуры (да и windows у меня уже давно нигде нет). Для запуска дочерних процессов используется sh (которая, кажется есть на всех юниксах), так что нет потребности указывать полный путь или там каталоги поиска и можно даже вызывать конвейеры, например:
CL-USER> (iproc:with-child-process (conveyer "cat | grep good" :stdin t :stdout t)
(let ((*standard-output* (iproc:process-input conveyer)))
(write-line "Haskell is bad")
(write-line "Python is bad")
(write-line "Common Lisp is good")
(write-line "IMHO"))
(iproc:process-input-close conveyer)
(read-line (iproc:process-output conveyer)))
"Common Lisp is good"

Комментариев нет:

Отправить комментарий