diff --git a/fsl/utils/run.py b/fsl/utils/run.py
index 9e916d8102ec2979b18777db89ffcab9e46b8306..7ea69adf25dd8fcefd349409962fddd85c4cabfe 100644
--- a/fsl/utils/run.py
+++ b/fsl/utils/run.py
@@ -127,11 +127,16 @@ def run(*args, **kwargs):
     # the process stdout/err on separate threads
     # to avoid deadlocks.
     def forward(in_, *outs):
+
+        # not all file-likes have a mode attribute -
+        # if not present, assume a string stream
+        omodes = [getattr(o, 'mode', 'w') for o in outs]
+
         def realForward():
             for line in in_:
-                for o in outs:
-                    if 'b' in o.mode: o.write(line)
-                    else:             o.write(line.decode('utf-8'))
+                for i, o in enumerate(outs):
+                    if 'b' in omodes[i]: o.write(line)
+                    else:                o.write(line.decode('utf-8'))
 
         t = threading.Thread(target=realForward)
         t.daemon = True