+ global running_pgids
+ local_pgid = None
+
+ try:
+ preexec_function = None
+ if not isWindows():
+ preexec_function = lambda: os.setpgid(0, 0)
+ proc = subprocess.Popen(
+ args,
+ bufsize=1,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ universal_newlines=True,
+ preexec_fn=preexec_function)
+ try:
+ if not isWindows():
+ local_pgid = os.getpgid(proc.pid)
+ running_pgids.append(local_pgid)
+ 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)
+ except OSError as osE:
+ if osE.errno == 8:
+ osE.strerror += "\nOSError: [Errno 8] Executed scripts should start with shebang line (like #!/usr/bin/env sh)"
+ raise osE
+
+ cmdName = FileReader().filename + ":" + str(self.linenumber)