- proc = subprocess.Popen(args, bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True, preexec_fn=os.setsid)
- try:
- pgtokill = os.getpgid(proc.pid)
- except: # Ugly and psychorigid. Please improve python doc so we know what exceptions getpgid can throw.
- # os.getpgid failed. OK, no cleanup.
- pass
+ preexec_function = None
+ if not is_windows():
+ preexec_function = lambda: os.setpgid(0, 0)
+ proc = subprocess.Popen( # pylint: disable=subprocess-popen-preexec-fn
+ args,
+ bufsize=1,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ universal_newlines=True,
+ preexec_fn=preexec_function)
+ if not is_windows():
+ local_pid = proc.pid
+ TeshState().running_pids.append(local_pid)
+ except PermissionError:
+ logs.append("[{file}:{number}] Cannot start '{cmd}': The binary is not executable.".format(
+ file=FileReader().filename, number=self.linenumber, cmd=args[0]))
+ logs.append("[{file}:{number}] Current dir: {dir}".format(file=FileReader().filename,
+ number=self.linenumber, dir=os.getcwd()))
+ TeshState().set_return_code(3)
+ print('\n'.join(logs))
+ return
+ except NotADirectoryError:
+ logs.append("[{file}:{number}] Cannot start '{cmd}': The path to binary does not exist.".format(
+ file=FileReader().filename, number=self.linenumber, cmd=args[0]))
+ logs.append("[{file}:{number}] Current dir: {dir}".format(file=FileReader().filename,
+ number=self.linenumber, dir=os.getcwd()))
+ TeshState().set_return_code(3)
+ print('\n'.join(logs))
+ return