Run commands¶
env.run(...) takes one command string and waits for it to finish:
from sandweave import Sandbox
with Sandbox() as env:
result = env.run("python -c 'print(2 + 2)'")
print(result.stdout)
print(result.stderr)
print(result.returncode)
The command runs through /bin/sh -c inside the sandbox. Pipes, redirects,
environment expansion, and && work as shell expressions there.
Working directory and environment¶
with Sandbox() as env:
result = env.run("echo $MODE > result.txt && cat result.txt",
cwd="/workspace", env={"MODE": "evaluation"})
print(result.stdout)
Each call starts a new process. A cd or export in one call does not change
the next call. The default working directory is /workspace.
Exit codes and timeouts¶
from sandweave import CommandError, Sandbox
with Sandbox() as env:
result = env.run("python -c 'raise ValueError(42)'")
assert result.returncode != 0
print(result.stderr)
try:
env.run("false", check=True)
except CommandError as error:
print(error.result.returncode)
Use timeout=5 to give a command a five-second execution deadline. A timeout
raises CommandTimeout; it is separate from a program's nonzero exit status.
startup_timeout on Sandbox(...) controls sandbox creation instead.
Stream a process¶
from sandweave import Sandbox
with Sandbox() as env:
process = env.exec("python -u -c 'print(1); print(2)'")
for line in process.stdout:
print(line, end="")
process.wait(check=True)
exec returns immediately with a Process. Use its stdin, stdout, stderr,
poll(), wait(), and terminate() methods. The SDK drains command output
within its configured output limit.
For a terminal, pass pty=True. Terminal stdout and stderr share one stream;
process.resize(rows, cols) changes its dimensions.
Select a shell or literal arguments¶
with Sandbox() as env:
print(env.run("printf '%s\\n' {1..3}", shell="/bin/bash").stdout)
print(env.run(argv=["python", "-c", "print(2 + 2)"]).stdout)
Use argv when you need literal arguments without a shell. Do not combine it
with a command string or the shell option.
Output limits¶
Commands have a 64 MiB combined output limit by default. Override it with
max_output_bytes. Exceeding the limit terminates the command and raises
OutputLimitExceeded with partial output. Download large result files through
file access before terminating the sandbox.