diff options
author | Ralf Gommers <ralf.gommers@googlemail.com> | 2013-03-06 21:41:01 +0100 |
---|---|---|
committer | Ralf Gommers <ralf.gommers@googlemail.com> | 2013-03-06 21:44:15 +0100 |
commit | ff01555976cbbac5cb1ee9ecabc170a9d6886641 (patch) | |
tree | c5a6afab2b07a8b59f8a4cfa388301b53cd80e6d /numpy/distutils/exec_command.py | |
parent | bbcfcf6ad3cbb1cbdc348161ee44f729d41c09d1 (diff) | |
download | numpy-ff01555976cbbac5cb1ee9ecabc170a9d6886641.tar.gz |
BUG: fix issue with distutils.exec_command introduced in 1.7.0.
Closes gh-2999 and gh-2915.
There are several packages (nose, scipy.weave.inline, Sage inline Fortran) that
replace stdout, in which case it doesn't have a fileno method. This method was
attempted to be used (change in gh-2766 to fix a py3k issue).
Diffstat (limited to 'numpy/distutils/exec_command.py')
-rw-r--r-- | numpy/distutils/exec_command.py | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/numpy/distutils/exec_command.py b/numpy/distutils/exec_command.py index f05b56429..9707f360d 100644 --- a/numpy/distutils/exec_command.py +++ b/numpy/distutils/exec_command.py @@ -195,7 +195,8 @@ def exec_command( command, # _exec_command_posix uses os.system and is faster # but not on all platforms os.system will return # a correct status. - if _with_python and sys.stdout.fileno() == -1: + if _with_python and hasattr(sys.stdout, 'fileno') and \ + sys.stdout.fileno() == -1: st = _exec_command_python(command, exec_command_dir = exec_dir, **env) @@ -349,12 +350,17 @@ def _exec_command( command, use_shell=None, use_tee = None, **env ): argv = [os.environ['COMSPEC'],'/C'] + argv using_command = 1 - so_fileno = sys.stdout.fileno() - se_fileno = sys.stderr.fileno() - so_flush = sys.stdout.flush - se_flush = sys.stderr.flush - so_dup = os.dup(so_fileno) - se_dup = os.dup(se_fileno) + _has_fileno = hasattr(sys.stdout, 'fileno') + if _has_fileno: + so_fileno = sys.stdout.fileno() + se_fileno = sys.stderr.fileno() + so_flush = sys.stdout.flush + se_flush = sys.stderr.flush + so_dup = os.dup(so_fileno) + se_dup = os.dup(se_fileno) + else: + so_flush = sys.stdout.flush + se_flush = sys.stderr.flush outfile = temp_file_name() fout = open(outfile,'w') @@ -371,13 +377,16 @@ def _exec_command( command, use_shell=None, use_tee = None, **env ): so_flush() se_flush() - os.dup2(fout.fileno(),so_fileno) - if using_command: - #XXX: disabled for now as it does not work from cmd under win32. - # Tests fail on msys - os.dup2(ferr.fileno(),se_fileno) - else: - os.dup2(fout.fileno(),se_fileno) + if _has_fileno: + os.dup2(fout.fileno(),so_fileno) + + if _has_fileno: + if using_command: + #XXX: disabled for now as it does not work from cmd under win32. + # Tests fail on msys + os.dup2(ferr.fileno(),se_fileno) + else: + os.dup2(fout.fileno(),se_fileno) try: status = spawn_command(os.P_WAIT,argv0,argv,os.environ) except OSError: @@ -387,8 +396,9 @@ def _exec_command( command, use_shell=None, use_tee = None, **env ): so_flush() se_flush() - os.dup2(so_dup,so_fileno) - os.dup2(se_dup,se_fileno) + if _has_fileno: + os.dup2(so_dup,so_fileno) + os.dup2(se_dup,se_fileno) fout.close() fout = open_latin1(outfile,'r') |