Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
tesh: try harder to not loose the cwd between threads
[simgrid.git] / tools / tesh / tesh.py
index 3aeeb20..5ba29b8 100755 (executable)
@@ -5,7 +5,7 @@
 tesh -- testing shell
 ========================
 
-Copyright (c) 2012-2017. The SimGrid Team. All rights reserved.
+Copyright (c) 2012-2018. The SimGrid Team. All rights reserved.
 
 This program is free software; you can redistribute it and/or modify it
 under the terms of the license (GNU LGPL) which comes with this package.
@@ -188,7 +188,7 @@ class TeshState(Singleton):
             t.acquire()
             t.release()
 
-#Command line object
+# Command line object
 class Cmd(object):
     def __init__(self):
         self.input_pipe = []
@@ -199,7 +199,8 @@ class Cmd(object):
         self.linenumber = -1
 
         self.background = False
-        self.cwd = None
+        # Python threads loose the cwd
+        self.cwd = os.getcwd()
 
         self.ignore_output = False
         self.expect_return = 0
@@ -259,8 +260,6 @@ class Cmd(object):
     def run_if_possible(self):
         if self.can_run():
             if self.background:
-                #Python threads loose the cwd
-                self.cwd = os.getcwd()
                 lock = _thread.allocate_lock()
                 lock.acquire()
                 TeshState().add_thread(lock)
@@ -273,10 +272,8 @@ class Cmd(object):
 
 
     def _run(self, lock=None):
-        #Python threads loose the cwd
-        if self.cwd is not None:
-            os.chdir(self.cwd)
-            self.cwd = None
+        # Python threads loose the cwd
+        os.chdir(self.cwd)
 
         #retrocompatibility: support ${aaa:=.} variable format
         def replace_perl_variables(m):
@@ -326,6 +323,14 @@ class Cmd(object):
             except OSError:
                 # os.getpgid failed. OK. No cleanup.
                 pass
+        except PermissionError:
+            print("["+FileReader().filename+":"+str(self.linenumber)+"] Cannot start '"+args[0]+"': The binary is not executable.")
+            print("["+FileReader().filename+":"+str(self.linenumber)+"] Current dir: "+os.getcwd())
+            tesh_exit(3)            
+        except NotADirectoryError:
+            print("["+FileReader().filename+":"+str(self.linenumber)+"] Cannot start '"+args[0]+"': The path to binary does not exist.")
+            print("["+FileReader().filename+":"+str(self.linenumber)+"] Current dir: "+os.getcwd())
+            tesh_exit(3)
         except FileNotFoundError:
             print("["+FileReader().filename+":"+str(self.linenumber)+"] Cannot start '"+args[0]+"': File not found")
             tesh_exit(3)