Also decode strings in _DynamicStringTable.get_string() (#217)
[pyelftools.git] / test / utils.py
index 803a9995d81330d5af50c473b8ee819773144d15..8eedacf563c98b5c3dd17fa5444d833c5ef31875 100644 (file)
@@ -6,28 +6,31 @@
 # Eli Bendersky (eliben@gmail.com)
 # This code is in the public domain
 #-------------------------------------------------------------------------------
-import os, subprocess, tempfile
+from __future__ import print_function
+import os, sys, subprocess, tempfile
 
 
-def run_exe(exe_path, args):
+def run_exe(exe_path, args=[], echo=False):
     """ Runs the given executable as a subprocess, given the
         list of arguments. Captures its return code (rc) and stdout and
         returns a pair: rc, stdout_str
     """
     popen_cmd = [exe_path] + args
     if os.path.splitext(exe_path)[1] == '.py':
-        popen_cmd.insert(0, 'python')
-    proc = subprocess.Popen(popen_cmd, stdout=subprocess.PIPE)
+        popen_cmd.insert(0, sys.executable)
+    if echo:
+      print('[cmd]', ' '.join(popen_cmd))
+    proc = subprocess.Popen(popen_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     proc_stdout = proc.communicate()[0]
-    return proc.returncode, proc_stdout
-    
+    from elftools.common.py3compat import bytes2str
+    return proc.returncode, bytes2str(proc_stdout)
+
 
 def is_in_rootdir():
     """ Check whether the current dir is the root dir of pyelftools
     """
-    dirstuff = os.listdir('.')
-    return 'test' in dirstuff and 'elftools' in dirstuff
-    
+    return os.path.isdir('test') and os.path.isdir('elftools')
+
 
 def dump_output_to_temp_files(testlog, *args):
     """ Dumps the output strings given in 'args' to temp files: one for each
@@ -41,4 +44,3 @@ def dump_output_to_temp_files(testlog, *args):
         file.write(s)
         file.close()
         testlog.info('@@ Output #%s dumped to file: %s' % (i + 1, path))
-