- proc = subprocess.Popen(args, bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True, start_new_session=True)
- try:
- pgtokill = os.getpgid(proc.pid)
- except OSError:
- # os.getpgid failed. OK. No cleanup.
- pass
+ 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)
+ if not isWindows():
+ local_pid = proc.pid
+ 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()))
+ return_code = max(3, return_code)
+ 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()))
+ return_code = max(3, return_code)
+ print('\n'.join(logs))
+ return