Run shell commands with persistent directory context, full logging, color output, and log export.
pip install pycmdrunWith color support:
pip install pycmdrun[color]from pycmdrun import cmd
cmd.cd(r"C:\Users\Fede\Desktop")
cmd.run("echo Hello from pycmdrun")
cmd.run(["pip", "install", "numpy"]) # list form also works
print(cmd.log)
cmd.save_log("session.json", fmt="json")Changes the working directory for all subsequent run() calls.
- Expands
~and environment variables - Raises
ValueErrorif the directory does not exist - Returns
selfso it can be chained:cmd.cd("/tmp").run("ls")
Executes a command in the current working directory.
| Parameter | Type | Default | Description |
|---|---|---|---|
command |
str or list[str] |
— | Command to run |
timeout |
float |
None |
Kill after N seconds |
raise_on_error |
bool |
False |
Raise RuntimeError on non-zero exit |
env |
dict |
None |
Extra environment variables |
CommandResult attributes:
| Attribute | Type | Description |
|---|---|---|
.stdout |
str |
Standard output |
.stderr |
str |
Standard error |
.returncode |
int |
Exit code (0 = success) |
.ok |
bool |
True when returncode == 0 |
.cwd |
str |
Directory where the command ran |
Returns a formatted string with the full history of every cd() and run() call.
[1] 2026-01-15 10:30:00 | cwd: /tmp
$ echo Hello
exit: 0
stdout:
Hello
Exports the log to a file. fmt can be "txt" or "json".
cmd.save_log("session.txt")
cmd.save_log("session.json", fmt="json")Raw log as a list[dict] for programmatic access. Each entry has:
timestamp, command, stdout, stderr, returncode, cwd.
Clears all log entries.
Returns the current working directory.
Prints each command and its result in real time as it runs:
from pycmdrun import CommandRunner
cmd = CommandRunner(verbose=True)
cmd.cd("/tmp")
cmd.run("echo Hello")Output:
→ cwd: /tmp
$ echo Hello
✓ exit: 0
Hello
Install colorama to get colored output in the log and verbose mode:
pip install pycmdrun[color]
# or
pip install coloramaWhen saving logs to file with save_log(), ANSI color codes are automatically stripped.
MIT © Fede