XmyShell
XmyShell is a shell-like tool built on top of prompt_toolkit which provides a persistent Python runtime. The main process is Python, and shell commands are executed in subprocesses. It provides a persistent Python namespace, inline Python evaluation, and command output capture. It can be useful if you want Python evaluation in a shell or execute shell command conveniently in Python REPL environment.
Get started
Installation
pip install xmyshell
Start
$ xmyshell
XmyShell 0.1.0
Initialized with 296ms.
Username@hostname ➜ ~ 0ms
❯
Learn more through help.
❯ help
Features
Command Line Features
- Persistent Python namespace across commands (variables, imports, functions)
- Expand inline Python expressions within
{}, using independent namespace.
❯ mkdir {" ".join(f"test{i}" for i in range(10))}
❯ ls
test0 test1 test2 test3 test4 test5 test6 test7 test8 test9
- Evaluate and print Python expressions with
print
❯ print 1 + 1
2
- Execute Python statements with
pyexec
❯ pyexec files = [f for f in os.listdir('.') if f.endswith('.py')]
❯ print len(files)
3
- Capture command output into a Python variable with
=>.
❯ which python => path
❯ print path
/usr/bin/python
❯ cd {dirname(path)}
❯ pwd
/usr/bin
- Redirect the output of Python commands (
print,pyexec) with|>
❯ print "\n".join(str(i) for i in range(100)) |> grep 42 => result
❯ print result
42
- Built-in
sourcecommand to run python scripts.
❯ which python
/usr/bin/python
❯ source .venv/bin/activate_this.py
❯ which python
/tmp/test/.venv/bin/python
- Built-in
exportcommand.
❯ pyexec foo = "foo"
❯ export ENV_VAR={foo}bar
❯ print ENV_VAR
foobar
- Built-in
importcommand.
❯ import numpy as np
❯ from math import *
- Reload with
reloadcommand.
❯ reload
- Syntax highlighting via
prompt_toolkit - Powerful auto-completion, history search, and automatic bracket/quote pairing
- Startup configuration:
~/.xmyshell/config.pyloaded at launch - Cross-platform (Windows, Linux, macOS)
Built-in Helper Functions
-
getlogin()Returns the current username. -
getcwd()Returns the absolute path of the current working directory. -
dirname(path)Returns the parent directory of a path. -
basename(path)Returns the final component of a path.
Reserved global varibles
-
exit_codeThe exit code of the last command. -
exec_durationThe duration which last command took.
Keyboard Shortcuts
↑↓-> Navigate through command history.→-> Apply selected history entry to the prompt.Ctrl+R-> Reverse incremental searching (history).Ctrl+D-> Exit XmyShell.- Auto bracket/parenthesis/quote pairing
Limitations
XmyShell is Python‑first. This brings power, but also intentional trade‑offs.
-
No
sourcefor shell scripts —sourceexecutes Python files viarunpy.run_path(). Shell scripts (e.g.,venv/bin/activate) won't work; useactivate_this.pyinstead. -
No
deactivate— This is a shell function, not a real command. Virtual environments can be deactivated by reloading environment (reload) or manually restarting a session. -
Shell scripts cannot modify the current environment — Every external command runs in a fresh subprocess;
cd,export, aliases, and function definitions inside a script are lost on exit. -
No pipelines between built‑in commands —
printandpyexecdo not support|. Use Python variables to pass data. -
External command overhead — Each subprocess spawns with minor delays.
Why? XmyShell is NOT a Bash replacement. It's a Python‑native environment for those who want Python's power at the command line.
Release files for xmyshell 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xmyshell-0.1.2.tar.gz | 45.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xmyshell-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 92.0 kB
Release files / xmyshell-0.1.2.tar.gz
| Download URL | xmyshell-0.1.2.tar.gz |
|---|---|
| Size | 45.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bf5297c9d05af913862b2dd3226339b3f3c4e61ee002280cd6f0d1404d938bab
|
|
BLAKE2b-256 checksum How to use checksums |
348892fcffd3cd55182f7fb68ba9dd3c339440b74625a5f6f39f2a1978ebafd3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|
Release files / xmyshell-0.1.2-py3-none-any.whl
| Download URL | xmyshell-0.1.2-py3-none-any.whl |
|---|---|
| Size | 46.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b1f7764a36a23cbe35a16f287ffdd007aa043526e9f569d45379475e9386468f
|
|
BLAKE2b-256 checksum How to use checksums |
bfc5546d4761c49e95c6bf0ae20eaa9ecdf44b0065bb4b0c23b86a16c0b23a7b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|