Skip to main content

interactive terminal in the browser

Project description

pyxterm.js

A fully functional terminal in your browser.

screenshot

How does this work?

On the backend:

  • A Flask server is running
  • The Flask server uses flask-socketio, a websocket library for Flask and socketio
  • A pty ("pseudo-terminal") is spawned that runs bash.
    • You can think of a pty as a way to serialize/deserialize a terminal session. The Python docs describe it as "starting another process and being able to write to and read from its controlling terminal programmatically".

On the frontend:

  • Xterm.js is used to render Xterm output data in the browser.
    • This means escape codes used by terminals to control the cursor location, color, and other options can be passed directly to Xterm.js and Xterm.js will faithfully render them as a terminal would.
    • Output from the pty process on the backend is fed into it.
    • Input from the browser is passed via websocket to the pty's input

Why?

The real purpose of this is to show a basic proof of concept on how to bring Xterm.js, Python, Flask, and Websockets together to run a pty in the browser.

This is a

  • starting point to build your own web app with a terminal
  • learning tool to understand what a pty is, and how to use one in Python
  • way to see Flask and Flask-SocketIO in action
  • way to play around with Xterm.js in a meaningful environment

Installation

Option 1

Run pyxtermjs with no commitment in an ephemeral environment with pipx

pipx run pyxtermjs  # install and run in ephemeral environment

Option 2

Clone this repository, enter the pyxtermjs directory, create a virtual environment (python3 -m venv venv), activate it (source venv/bin/activate) then run

pip install -r requirements.txt
python -m pyxtermjs

Documentation

>> pyxtermjs --help
usage: pyxtermjs [-h] [-p PORT] [--debug] [--version] [--command COMMAND]
                 [--cmd-args CMD_ARGS]

A fully functional terminal in your browser.
https://github.com/cs01/pyxterm.js

optional arguments:
  -h, --help            show this help message and exit
  -p PORT, --port PORT  port to run server on (default: 5000)
  --debug               debug the server (default: False)
  --version             print version and exit (default: False)
  --command COMMAND     Command to run in the terminal (default: bash)
  --cmd-args CMD_ARGS   arguments to pass to command (i.e. --cmd-args='arg1
                        arg2 --flag') (default: )

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyxtermjs-0.4.0.1.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

pyxtermjs-0.4.0.1-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file pyxtermjs-0.4.0.1.tar.gz.

File metadata

  • Download URL: pyxtermjs-0.4.0.1.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7

File hashes

Hashes for pyxtermjs-0.4.0.1.tar.gz
Algorithm Hash digest
SHA256 cbb05c5821b67890b255b54b81f742ea30045d45b5601683d7bf4e14c8096d2c
MD5 e9a0b1fb4779ce1af54344c8dad7e08e
BLAKE2b-256 370057a0f752f518eda2a471c38f9526f8e0906a91df0559e703da41e7b0277b

See more details on using hashes here.

File details

Details for the file pyxtermjs-0.4.0.1-py3-none-any.whl.

File metadata

  • Download URL: pyxtermjs-0.4.0.1-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.7

File hashes

Hashes for pyxtermjs-0.4.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 02e426af145e7f28212eaf426dd089d4f6bc1e13f7f6319a8d5e10a27fa195d0
MD5 639130da423d8c4432916159873fbf06
BLAKE2b-256 91e708566695e619d4cd1d6f7f07adc35871ff75a890a55592e6488ced1b8e83

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page