in submitit/core/utils.py [0:0]
def __call__(self, *args: Any, **kwargs: Any) -> str:
"""Call the cammand line with addidional arguments
The keyword arguments will be sent as --{key}={val}
The logs bufferized. They will be printed if the job fails, or sent as output of the function
Errors are provided with the internal stderr.
"""
full_command = (
self.command + [str(x) for x in args] + [f"--{x}={y}" for x, y in kwargs.items()]
) # TODO bad parsing
if self.verbose:
print(f"The following command is sent: \"{' '.join(full_command)}\"")
with subprocess.Popen(
full_command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=False,
cwd=self.cwd,
env=self.env,
) as process:
stdout_buffer = io.StringIO()
stderr_buffer = io.StringIO()
try:
copy_process_streams(process, stdout_buffer, stderr_buffer, self.verbose)
except Exception as e:
process.kill()
process.wait()
raise FailedJobError("Job got killed for an unknown reason.") from e
stdout = stdout_buffer.getvalue().strip()
stderr = stderr_buffer.getvalue().strip()
retcode = process.wait()
if stderr and (retcode and not self.verbose):
# We don't print is self.verbose, as it already happened before.
print(stderr, file=sys.stderr)
if retcode:
subprocess_error = subprocess.CalledProcessError(
retcode, process.args, output=stdout, stderr=stderr
)
raise FailedJobError(stderr) from subprocess_error
return stdout