@@ -1270,6 +1270,10 @@ def _process(drain=0):
12701270 result ['merged' ] = [r [1 ] for r in temp ]
12711271 if output == 'allatonce' :
12721272 stdout , stderr = proc .communicate ()
1273+ if stdout and isinstance (stdout , bytes ):
1274+ stdout = stdout .decode ()
1275+ if stderr and isinstance (stderr , bytes ):
1276+ stderr = stderr .decode ()
12731277 result ['stdout' ] = str (stdout ).split ('\n ' )
12741278 result ['stderr' ] = str (stderr ).split ('\n ' )
12751279 result ['merged' ] = ''
@@ -1556,7 +1560,7 @@ def _filename_from_source(self, name, chain=None):
15561560
15571561 trait_spec = self .inputs .trait (name )
15581562 retval = getattr (self .inputs , name )
1559-
1563+ source_ext = None
15601564 if not isdefined (retval ) or "%s" in retval :
15611565 if not trait_spec .name_source :
15621566 return retval
@@ -1585,7 +1589,7 @@ def _filename_from_source(self, name, chain=None):
15851589
15861590 # special treatment for files
15871591 try :
1588- _ , base , _ = split_filename (source )
1592+ _ , base , source_ext = split_filename (source )
15891593 except AttributeError :
15901594 base = source
15911595 else :
@@ -1594,14 +1598,17 @@ def _filename_from_source(self, name, chain=None):
15941598
15951599 chain .append (name )
15961600 base = self ._filename_from_source (ns , chain )
1601+ if isdefined (base ):
1602+ _ , _ , source_ext = split_filename (base )
15971603
15981604 chain = None
15991605 retval = name_template % base
16001606 _ , _ , ext = split_filename (retval )
1601- if trait_spec .keep_extension and ext :
1602- return retval
1603- return self ._overload_extension (retval , name )
1604-
1607+ if trait_spec .keep_extension and (ext or source_ext ):
1608+ if (ext is None or not ext ) and source_ext :
1609+ retval = retval + source_ext
1610+ else :
1611+ retval = self ._overload_extension (retval , name )
16051612 return retval
16061613
16071614 def _gen_filename (self , name ):
0 commit comments