RSS Feed

Lisp Project of the Day

simple-inferiors

You can support this project by donating at:

Donate using PatreonDonate using Liberapay

Or see the list of project sponsors.

simple-inferiorsos

This system is a wrapper around uiop's run-process. Documentation (http://quickdocs.org/simple-inferiors/) states it handles proper copying of stdout and stderr of the process simultaneously, both in a sequential and parallel fashion.

I've read the code of the simple-inferiors and don't understand why does it significantly better than using plain uiop:run-process.

Here is an example of calls both of these libraries:

POFTHEDAY> (simple-inferiors:run "ls" () :output t)
2020-03
LICENSE
README.org
media
poftheday.asd
0 (0 bits, #x0, #o0, #b0)

POFTHEDAY>  (uiop:run-program (list "ls") :output t)
2020-03
LICENSE
README.org
media
poftheday.asd
NIL
NIL
0 (0 bits, #x0, #o0, #b0)

Probably, the most convenient part of simple-inferiors is how it handles nested directory changing. Again, here is an illustration:

POFTHEDAY> (progn
             (format t "~2&Directory structure:~2%")
             (simple-inferiors:run "tree" '("foo") :output t)
             
             (format t "~2&Going one step down:~2%")
             (simple-inferiors:with-chdir ("foo/")
               (simple-inferiors:run "ls" '("-l") :output t)
               
               (format t "~2&Going deeper:~2%")
               (simple-inferiors:with-chdir ("bar/")
                 (simple-inferiors:run "ls" '("-l") :output t))))

Directory structure:

foo
├── bar
│   └── world.txt
└── hello.txt

1 directory, 2 files

Going one step down:

total 0
drwxr-xr-x  3 art  LD\Domain Users  96 Mar 12 13:19 bar
-rw-r--r--  1 art  LD\Domain Users   0 Mar 12 13:18 hello.txt

Going deeper:

total 0
-rw-r--r--  1 art  LD\Domain Users  0 Mar 12 13:19 world.txt

There is the inconsistency in the way how does with-chdir work. You need to keep in mind that a directory name should have a backslash at the end. Otherwise, nesting won't work:

POFTHEDAY> (simple-inferiors:with-chdir ("foo/")
             (simple-inferiors:with-chdir ("bar/")
               simple-inferiors:*cwd*))
#P"/Users/art/lisp-project-of-the-day/foo/bar/"
POFTHEDAY> ;; Now, without slashes
; No values
POFTHEDAY> (simple-inferiors:with-chdir ("foo")
             (simple-inferiors:with-chdir ("bar")
               simple-inferiors:*cwd*))
#P"/Users/art/lisp-project-of-the-day/bar"

I've created an issue on this problem:

https://github.com/Shinmera/simple-inferiors/issues/4

Does somebody want to fix it?


Brought to you by 40Ants under Creative Commons License