diff --git a/test/test-run-program-unix.script b/test/test-run-program-unix.script
index a926451e3f863ac7f8b7ca9654853c2c80341500..7429542a5b8d3af2878cc5cdc29ab587e4ca670e 100644
--- a/test/test-run-program-unix.script
+++ b/test/test-run-program-unix.script
@@ -212,14 +212,30 @@
 
 (define-test
     "launch-program :output t"
-    (launch-program (list "echo" "echoing output")
-                 :output t))
+    (catch 'unimplemented
+     (handler-bind
+         (
+          #+lispworks
+          (not-implemented-error
+            #'(lambda (x)
+                (format t "~&This behavior is expected to be unimplemented on this lisp.~%")
+                (throw 'unimplemented t))))
+       (launch-program (list "echo" "echoing output")
+                       :output t))))
 
 (define-test
     "launch-program :error-output t"
-    (uiop:wait-process
-     (launch-program (format nil "./exiter.sh 0 ~a" output-string)
-                     :error-output t)))
+    (catch 'unimplemented
+     (handler-bind
+         (
+          #+lispworks
+          (not-implemented-error
+            #'(lambda (x)
+                (format t "~&This behavior is expected to be unimplemented on this lisp.~%")
+                (throw 'unimplemented t))))
+       (uiop:wait-process
+        (launch-program (format nil "./exiter.sh 0 ~a" output-string)
+                        :error-output t)))))
 
 (define-test
     ":output <file> (file e.)"
diff --git a/uiop/launch-program.lisp b/uiop/launch-program.lisp
index 62754456d4cb422bb51dd6f57acf9b453ea5d0dd..a5bd320260d851822037174c5c34cf934d87e99a 100644
--- a/uiop/launch-program.lisp
+++ b/uiop/launch-program.lisp
@@ -168,8 +168,13 @@ argument to pass to the internal RUN-PROGRAM"
                                      role specifier))
              (t (parameter-error "~S IO specifier invalid for ~S" specifier role))))
       ((eql t)
+       #+lispworks
+       (not-implemented-error :interactive-output
+                              "On this lisp implementation, cannot interpret ~a value of ~a"
+                              specifier role)
+       #-lispworks
        (cond ((eq role :error-output) *error-output*)
-             ((eq role :output) *standard-output*)
+             ((eq role :output) #+lispworks *terminal-io* #-lispworks *standard-output*)
              ((eq role :input) *standard-input*)))
       (otherwise
        (parameter-error "Incorrect I/O specifier ~S for ~S"