- proc = subprocess.Popen(args, bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
- except OSError as e:
- if e.errno == 8:
- e.strerror += "\nOSError: [Errno 8] Executed scripts should start with shebang line (like #!/bin/sh)"
- raise e
+ 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())
+ return_code = max(3, return_code)
+ return
+ 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())
+ return_code = max(3, return_code)
+ return
+ except FileNotFoundError:
+ print("[" + FileReader().filename + ":" + str(self.linenumber) +
+ "] Cannot start '" + args[0] + "': File not found")
+ return_code = max(3, return_code)
+ return
+ 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