Plumbum: Shell Combinators

Related tags

CLI Tools plumbum
Overview
Documentation Status Build Status Coverage Status PyPI Status PyPI Versions Conda-Forge Badge PyPI License Join the chat at https://gitter.im/plumbumpy/Lobby Code styled with Black

Plumbum: Shell Combinators

Ever wished the compactness of shell scripts be put into a real programming language? Say hello to Plumbum Shell Combinators. Plumbum (Latin for lead, which was used to create pipes back in the day) is a small yet feature-rich library for shell script-like programs in Python. The motto of the library is "Never write shell scripts again", and thus it attempts to mimic the shell syntax ("shell combinators") where it makes sense, while keeping it all Pythonic and cross-platform.

Apart from shell-like syntax and handy shortcuts, the library provides local and remote command execution (over SSH), local and remote file-system paths, easy working-directory and environment manipulation, and a programmatic Command-Line Interface (CLI) application toolkit. Now let's see some code!

This is only a teaser; the full documentation can be found at Read the Docs

Cheat Sheet

Basics

>> notepad() # Notepad window pops up '' # Notepad window is closed by user, command returns">
>>> from plumbum import local
>>> local.cmd.ls
LocalCommand(/bin/ls)
>>> local.cmd.ls()
'build.py\nCHANGELOG.rst\nconda.recipe\nCONTRIBUTING.rst\ndocs\nexamples\nexperiments\nLICENSE\nMANIFEST.in\nPipfile\nplumbum\nplumbum.egg-info\npytest.ini\nREADME.rst\nsetup.cfg\nsetup.py\ntests\ntranslations.py\n'
>>> notepad = local["c:\\windows\\notepad.exe"]
>>> notepad()                                   # Notepad window pops up
''                                              # Notepad window is closed by user, command returns

In the example above, you can use local["ls"] if you have an unusually named executable or a full path to an executable. The local object represents your local machine. As you'll see, Plumbum also provides remote machines that use the same API! You can also use from plumbum.cmd import ls as well for accessing programs in the PATH.

Piping

>> print(chain) /bin/ls -a | /bin/grep -v '\.py' | /usr/bin/wc -l >>> chain() '27\n'">
>>> from plumbum.cmd import ls, grep, wc
>>> chain = ls["-a"] | grep["-v", r"\.py"] | wc["-l"]
>>> print(chain)
/bin/ls -a | /bin/grep -v '\.py' | /usr/bin/wc -l
>>> chain()
'27\n'

Redirection

>> (ls["-a"] > "file.list")() '' >>> (cat["file.list"] | wc["-l"])() '31\n'">
>>> from plumbum.cmd import cat, head
>>> ((cat < "setup.py") | head["-n", 4])()
'#!/usr/bin/env python\nimport os\n\ntry:\n'
>>> (ls["-a"] > "file.list")()
''
>>> (cat["file.list"] | wc["-l"])()
'31\n'

Working-directory manipulation

>>> local.cwd
<LocalWorkdir /home/tomer/workspace/plumbum>
>>> with local.cwd(local.cwd / "docs"):
...     chain()
...
'22\n'

Foreground and background execution

>> (ls["-a"] | grep[r"\.py"]) & BG # The process runs "in the background" ">
>>> from plumbum import FG, BG
>>> (ls["-a"] | grep[r"\.py"]) & FG         # The output is printed to stdout directly
build.py
setup.py
translations.py
>>> (ls["-a"] | grep[r"\.py"]) & BG         # The process runs "in the background"
<Future ['/bin/grep', '\\.py'] (running)>

Command nesting

>> (sudo[ifconfig["-a"]] | grep["-i", "loop"]) & FG lo Link encap:Local Loopback UP LOOPBACK RUNNING MTU:16436 Metric:1">
>>> from plumbum.cmd import sudo, ifconfig
>>> print(sudo[ifconfig["-a"]])
/usr/bin/sudo /sbin/ifconfig -a
>>> (sudo[ifconfig["-a"]] | grep["-i", "loop"]) & FG
lo        Link encap:Local Loopback
          UP LOOPBACK RUNNING  MTU:16436  Metric:1

Remote commands (over SSH)

Supports openSSH-compatible clients, PuTTY (on Windows) and Paramiko (a pure-Python implementation of SSH2)

>> r_ls = remote["ls"] >>> with remote.cwd("/lib"): ... (r_ls | grep["0.so.0"])() ... 'libusb-1.0.so.0\nlibusb-1.0.so.0.0.0\n'">
>>> from plumbum import SshMachine
>>> remote = SshMachine("somehost", user = "john", keyfile = "/path/to/idrsa")
>>> r_ls = remote["ls"]
>>> with remote.cwd("/lib"):
...     (r_ls | grep["0.so.0"])()
...
'libusb-1.0.so.0\nlibusb-1.0.so.0.0.0\n'

CLI applications

import logging
from plumbum import cli

class MyCompiler(cli.Application):
    verbose = cli.Flag(["-v", "--verbose"], help = "Enable verbose mode")
    include_dirs = cli.SwitchAttr("-I", list = True, help = "Specify include directories")

    @cli.switch("--loglevel", int)
    def set_log_level(self, level):
        """Sets the log-level of the logger"""
        logging.root.setLevel(level)

    def main(self, *srcfiles):
        print("Verbose:", self.verbose)
        print("Include dirs:", self.include_dirs)
        print("Compiling:", srcfiles)

if __name__ == "__main__":
    MyCompiler.run()
Sample output
$ python simple_cli.py -v -I foo/bar -Ispam/eggs x.cpp y.cpp z.cpp
Verbose: True
Include dirs: ['foo/bar', 'spam/eggs']
Compiling: ('x.cpp', 'y.cpp', 'z.cpp')

Colors and Styles

from plumbum import colors
with colors.red:
    print("This library provides safe, flexible color access.")
    print(colors.bold | "(and styles in general)", "are easy!")
print("The simple 16 colors or",
      colors.orchid & colors.underline | '256 named colors,',
      colors.rgb(18, 146, 64) | "or full rgb colors",
      'can be used.')
print("Unsafe " + colors.bg.dark_khaki + "color access" + colors.bg.reset + " is available too.")
Comments
  • fix: glob characters in local paths

    fix: glob characters in local paths

    Addresses only the local part of https://github.com/tomerfiliba/plumbum/issues/481 with minimal changes and no new dependencies. I haven't worked with the remote parts of plumbum, sorry.

    opened by wtanksleyjr 19
  • Release 1.6.8 (and 1.7 notice)

    Release 1.6.8 (and 1.7 notice)

    We need to make a release fairly soon, while Travis is still able to run Python 2.6. I'd like to make a 1.6.8 release, and then drop Python 2.6 and non-setuptools builds from master. This would start on the 1.7 work; any critical fixes or easy patches could be backported to a 1.6 branch if needed, but 1.7 would not support Python 2.6. This should allow some cleanup as well. If you are using Python 2.6, which people on RHEL6 based systems might be, plumbum would need to be restricted to <1.7.

    Todo:

    • [ ] Check translations
    • [ ] Fill out changelog
    • [ ] Evaluate old PRs
    opened by henryiii 17
  • Overzealous string quoting / space escaping

    Overzealous string quoting / space escaping

    Hi,

    I'm using plumbum 1.4.1 to call reflector on Arch Linux. I'm not sure what the problem is, but somewhere along the way, way too much string/space escaping happens.

    Here is code to reproduce the problem:

    #!/usr/bin/env python3
    from itertools import chain
    from plumbum.cmd import reflector, sudo
    
    def update_mirrorlist(countries=['United States', 'Canada']):
        countries = list(chain(*[('--country', country) for country in countries]))
        print(sudo[reflector['--save', '/etc/pacman.d/mirrorlist', '--sort', 'score', '--latest', '30', countries]])
        sudo(reflector['--save', '/etc/pacman.d/mirrorlist', '--sort', 'score', '--latest', '30', countries])
    
    if __name__ == '__main__':
        update_mirrorlist()
    

    This yields the output

    /usr/bin/sudo /usr/bin/reflector --save /etc/pacman.d/mirrorlist --sort score --latest 30 --country 'United States' --country Canada
    

    which looks perfect. If I run that printed command exactly, I get the desired result. However, that is not what gets run by the final line in update_mirrorlist. The generated mirrorlist does not include anything from the United States, and the comments report that the command actually run was

    reflector --save /etc/pacman.d/mirrorlist --sort score --latest 30 --country ''"'"'United States'"'"'' --country Canada
    
    opened by AndydeCleyre 16
  • EOFError connecting to RHEL5 / RHEL6 remotes

    EOFError connecting to RHEL5 / RHEL6 remotes

    I'm currently experiencing issues setting up remotes towards RHEL5 & 6 remotes. I'm getting a stack trace with EOFError (see below). plumbum version 1.4.0. Python 3.2.3 & 3.3.4

    Connecting to remote Mac OS X 10.9.1 and Ubuntu 12.04.4 LTS works fine.

    debug1: Local version string SSH-2.0-OpenSSH_6.5
    

    RHEL 5 OpenSSH

    debug1: Remote protocol version 2.0, remote software version OpenSSH_4.3
    debug1: match: OpenSSH_4.3 pat OpenSSH_4* compat 0x00000000
    

    RHEL 6 OpenSSH

    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
    debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
    

    OS X 10.9.1 OpenSSH

    debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2
    debug1: match: OpenSSH_6.2 pat OpenSSH* compat 0x04000000
    

    Ubuntu 12.04 OpenSSH

    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.1
    debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.1 pat OpenSSH_5* compat 0x0c000000
    

    Traceback

    Traceback (most recent call last):
      File "./plum-e.py", line 15, in <module>
        with SshMachine(ssh_host, user=ssh_user, ssh_command=ssh, scp_command=scp, keyfile=ssh_key_path) as remote:
      File "/usr/lib/python3.2/site-packages/plumbum/machines/ssh_machine.py", line 101, in __init__
        BaseRemoteMachine.__init__(self, encoding = encoding, connect_timeout = connect_timeout)
      File "/usr/lib/python3.2/site-packages/plumbum/machines/remote.py", line 124, in __init__
        self._session = self.session()
      File "/usr/lib/python3.2/site-packages/plumbum/machines/ssh_machine.py", line 145, in session
        self.encoding, isatty, self.connect_timeout)
      File "/usr/lib/python3.2/site-packages/plumbum/machines/session.py", line 141, in __init__
        self.run("")
      File "/usr/lib/python3.2/site-packages/plumbum/machines/session.py", line 224, in run
        return run_proc(self.popen(cmd), retcode)
      File "/usr/lib/python3.2/site-packages/plumbum/commands/processes.py", line 186, in run_proc
        stdout, stderr = proc.communicate()
      File "/usr/lib/python3.2/site-packages/plumbum/machines/session.py", line 92, in communicate
        line = pipe.readline()
      File "/usr/lib/python3.2/site-packages/plumbum/machines/session.py", line 42, in readline
        raise EOFError()
    EOFError
    
    Bug 
    opened by eripa 15
  • Redirecting stdout/stderr without using

    Redirecting stdout/stderr without using "& FG or & BG constructs"

    I love the ability to create pipelines and to do file redirections in Plumbum with the bash-like syntax, but I'm not a big fan of the & FG/& BG constructs for actually running the pipelines, because I feel that they're an unintuitive syntax. I feel that there should be an explicit method call to run these commands, and indeed my IDE treats these statements as doing nothing: screenshot from 2017-11-03 15-50-02

    Is there a nice way to say "run this pipeline, with these redirections", without using these & constructs? I've looked at run() and popen(), but run() seems to return the entire stdout, which worries me because I'm doing large data processing and I don't want python to ever have to see this data. popen() is also more complex than I need, since you have to call communicate, and when you do so it still returns stdout, which I don't want.

    New feature 
    opened by multimeric 11
  • image.py: fix old-style(?) relative import statement

    image.py: fix old-style(?) relative import statement

    This fixes #365. I can't actually find when this syntax became illegal, but this replacement works both in Python 2.7 and 3.6 whereas the original doesn't.

    As I wrote in #365, this patch unbreaks installs under versions of pip that have a hard dependency on the py->pyc step succeeding.

    opened by tkluck 10
  • Add localization functions and russian localization

    Add localization functions and russian localization

    This PR fixes #335 - It adds gettext localization to all strings that are used in Application output. Also as a test I've written russian localization. Any other language can be easily added. This should be tested on py2.x and on Windows.

    opened by ASMfreaK 10
  • shquote breaks certain sudo commands

    shquote breaks certain sudo commands

    Hi, when using some sudo commands I found out that they were failing where they shouldn't have. E.g.:

    from plumbum.cmd import sudo, yum
    
    sudo(yum['install']['rubygem(rails)'])
    

    This fails, because rubygem(rails) gets overquoted by formulate (which calls shquote). This ends up formulated like this:

    ['/usr/bin/sudo', '/usr/bin/yum', 'install', "'rubygem(rails)'"]
    

    So yum in fact gets "'rubygem(rails)'" on commandline (because Popen puts the outer quotes there.

    I think that the problem can be solved by adding '(' and ')' to _safechars, which seems ok to me, but I'm not sure of other consequences of this. Any other options how to solve this?

    Thanks.

    V1.2 
    opened by bkabrda 10
  • fix handling of env-vars passed to plumbum Commands; support new with_cwd

    fix handling of env-vars passed to plumbum Commands; support new with_cwd

    Fix handling of env-vars passed to plumbum BoundEnvCommands: - don't use the non-threadsafe and session-dependent .env() context manager - sync popen support for 'env' param in all machine impls: local/ssh/paramiko - add .with_cwd() to complement .with_env()

    opened by koreno 9
  • Make argument type error messages use `__str__` method of `Predicate`s

    Make argument type error messages use `__str__` method of `Predicate`s

    Previous behavior looks like this

    Error: Argument of output expected to be <plumbum.cli.switches.Predicate object at 0x10ce91c10>, not 'requirements.txt':
            ValueError('output is a file, should be a directory',)
    

    now looks like this

        Error: Argument of output expected to be 'MakeDirectory', not 'requirements.txt':
            ValueError('output is a file, should be a directory',)
    

    when checking a Predicate.

    opened by gmarceau 9
  • Shell command advice

    Shell command advice

    Hi Tomer, what would be a good way to implement this command

    diff <(sed 's/pattern//g' file1) <(sed 's/pattern//g' file2)
    

    where pattern, file1 and file2 would change from one execution to another?

    opened by AntoineD 9
  • recursive globbing not work like pathlib

    recursive globbing not work like pathlib

    recursive globbing not work like pathlib. Is this intented?

    if cwd is /home/yakkle/tmp has subdirectory foo/bar, and has file sample.zip in foo/bar :

    >>> local.cwd // "**/*.zip"
    []
    >>> 
    

    will show empty list.

    if base path is /home/yakkle/tmp/foo:

    >>> local.cwd["foo"] // "**/*.zip"
    [<LocalPath /home/yakkle/tmp/foo/bar/sample.zip>]
    >>> 
    

    will show found result. but it only 1 depth search. not recursive.


    python docs says :

    The “**” pattern means “this directory and all subdirectories, recursively”. In other words, it enables recursive globbing:

    https://docs.python.org/3.9/library/pathlib.html?highlight=mkdir#pathlib.Path.glob

    opened by yakkle 0
  • keyfile is ignored by SshMachine

    keyfile is ignored by SshMachine

    I can't get ssh with key authentication to work. The keyfile attribute seems to be ignored and the program keeps asking for user password. There's even no difference when I specify invalid path to the key file. There's no quick way to examine the ssh command being used as plumbum doesn't have debug facilities (https://github.com/tomerfiliba/plumbum/issues/474).

    The key file is accessible and can be read in the same Python script.

    The code is basically with SshMachine('user@host', keyfile='./ssh/keyfile') as remote_box:

    Environment: Debian 11 Python 3.9.2 OpenSSH 8.4p1 Plumbum 1.7.2

    opened by youk 0
  • byte parameters and command names should be used as is

    byte parameters and command names should be used as is

    for example:

    print(plumbum.local['echo'](b'test'))

    should result in

    test

    but instead it results in:

    b'test'

    byte objects are not even supported in command names:

    plumbum.local[b'echo']

    results in a type error

    TypeError: a bytes-like object is required, not 'str'

    in plumbum/machines/local.py:243

    opened by vcalv 0
  • Run commands with environment from global environment

    Run commands with environment from global environment

    Hi, thanks for the great library. I have a question.

    As far as I understand, when you run commands via local object, they read environ from frozen local.env object. Is there a way to change that behavior and to make them use os.environ instead?

    The issue I have - I have other python code I don't have quite a control of that changes os.environ, so it would be more convenient if local would use os.environ instead of saved local.env.

    Thank you.

    opened by willir 0
  • Set PR_SET_PDEATHSIG on for all commands

    Set PR_SET_PDEATHSIG on for all commands

    Hi, thanks for the great library. I have a question - is it possible to set PR_SET_PDEATHSIG on Linux for all running commands?

    When I use subprocess myself, I do it like:

    SIGHUP = 1
    PR_SET_PDEATHSIG = 1
    libc = ctypes.CDLL("/lib64/libc.so.6")
    
    
    def set_pdeathsig_cb():
        ppid = os.getpid()
    
        def cb():
            res = libc.prctl(PR_SET_PDEATHSIG, SIGHUP)
            if res != 0:
                print(f"Fail to set PR_SET_PDEATHSIG. Return value: {res}", file=sys.stderr)
                sys.exit(1)
            if os.getppid() != ppid:
                print("Parent process has already died", file=sys.stderr)
                sys.exit(1)
    
        return cb
    
    with subprocess.Popen(cmd, preexec_fn=set_pdeathsig_cb()) as p:
        ...
    

    Thank you.

    opened by willir 0
Releases(v1.8.1)
  • v1.8.1(Jan 2, 2023)

    This release moves to using a pyproject.toml based packaging backend (hatchling).

    What's Changed

    • local: Accept path-like objects (#627)
    • Move the build backend to hatchling and hatch-vcs. Users should be unaffected. Third-party packaging may need to adapt to the new build system. (#607)

    New Contributors

    • @doronz88 made their first contribution in https://github.com/tomerfiliba/plumbum/pull/627

    Full Changelog: https://github.com/tomerfiliba/plumbum/compare/v1.8.0...v1.8.1

    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Oct 6, 2022)

    This is the final release series for Python 3.6.

    • Drop Python 2.7 and 3.5 support, add 3.11 support #573
    • Lots of extended checks and fixes for problems exposed.
    • Color: support NO_COLOR/FORCE_COLOR #575
    • Commands: New iter_lines buffer_size parameter #582
    • Commands: cache remote commands #583
    • SSH: Support reverse tunnels and dynamically allocated ports #608
    • CLI: add Set(..., all_markers={"*", "all"}) and fix support for other separators #619
    • CLI: support future annotations #621
    • Color: fix the ABC #617
    • Exceptions: fix for exception pickling #586
    • Fix for StdinDataRedirection and modifiers #605

    New Contributors

    • @damani42 made their first contribution in https://github.com/tomerfiliba/plumbum/pull/585
    • @pylanglois made their first contribution in https://github.com/tomerfiliba/plumbum/pull/588
    • @andriyor made their first contribution in https://github.com/tomerfiliba/plumbum/pull/593
    • @jesteria made their first contribution in https://github.com/tomerfiliba/plumbum/pull/605

    Full Changelog: https://github.com/tomerfiliba/plumbum/compare/v1.7.2...v1.8.0

    Source code(tar.gz)
    Source code(zip)
  • v1.7.2(Dec 23, 2021)

    This is the final release for Python 2 and 3.5.

    • Commands: avoid issue mktemp issue on some BSD variants (#571)
    • Better specification of dependency on pywin32( #568)
    • Some DeprecationWarnings changed to FutureWarnings (#567)
    Source code(tar.gz)
    Source code(zip)
  • v1.7.1(Nov 23, 2021)

    • Paths: glob with local paths no longer expands the existing path too (#552)
    • Paramiko: support reverse tunnels (#562)
    • SSHMachine: support forwarding Unix sockets in .tunnel() (#550)
    • CLI: Support COLOR_GROUP_TITLES (#553)
    • Fix a deprecated in Python 3.10 warning (#563)
    • Extended testing and checking on Python 3.10 and various PyPy versions. Nox is supported for easier new-user development.
    Source code(tar.gz)
    Source code(zip)
  • v1.7.0(Feb 8, 2021)

    • Commands: support .with_cwd() (#513)
    • Commands: make iter_lines deal with decoding errors during iteration (#525)
    • Commands: fix handling of env-vars passed to plumbum BoundEnvCommands (#513)
    • Commands: fix support for win32 in iter_lines (#500)
    • Paths: fix incorrect __getitem__ method in Path (#506)
    • Paths: Remote path stat had odd OSError (#505)
    • Paths: Fix RemotePath.copy() (#527)
    • Paths: missing __fspath__ added (#498)
    • SSH: better error reporting on SshSession error (#515)
    • Internal: redesigned CI, major cleanup to setuptools distribution, Black formatting, style checking throughout.

    If you install from the auto-generated tarball for Git releases, you should either use SETUPTOOLS_SCM_PRETEND_VERSION=${pkgver} pip install . (where pkgver is the package version, 1.7.0 in this case), or (not recommended) install setuptools_scm before running SETUPTOOLS_SCM_PRETEND_VERSION=${pkgver} python setup.py install. PyPI SDists have the version file already, and git checkouts will get the version from git tags.

    Source code(tar.gz)
    Source code(zip)
  • v1.6.9(Mar 23, 2020)

    • Last version to support Python 2.6; added python_requires (#507)
    • Paths: Fix bug with subscription operations (#498), (#506)
    • Paths: Fix resolve (#492)
    • Commands: Fix resolve (#491)
    • Commands: Add context manager on popen (#495)
    • Several smaller fixes (#500), (#505)
    Source code(tar.gz)
    Source code(zip)
  • v1.6.8(Oct 30, 2019)

    1.6.8

    • Exceptions: Changed ProcessExecutionError's formatting to be more user-friendly #456
    • Commands: support for per-line timeout with iter_lines #454
    • Commands: support for piping stdout/stderr to a logger #454
    • Paths: support composing paths using subscription operations #455
    • CLI: Improved 'Set' validator to allow non-string types, and CSV params #452
    • TypedEnv: Facility for modeling environment-variables into python data types #451
    • Commands: execute local/remote commands via a magic .cmd attribute #450
    Source code(tar.gz)
    Source code(zip)
  • v1.6.7(Aug 10, 2018)

    • Commands: Added run_* methods as an alternative to modifiers #386
    • CLI: Added support for ALLOW_ABREV #401
    • CLI: Added DESCRIPTION_MORE, preserves spacing #378
    • Color: Avoid throwing error in atexit in special cases (like pytest) #393
    • Including Python 3.7 in testing matrix.
    • Smaller bugfixes and other testing improvements.
    Source code(tar.gz)
    Source code(zip)
Bear-Shell is a shell based in the terminal or command prompt.

Bear-Shell is a shell based in the terminal or command prompt. You can navigate files, run python files, create files via the BearUtils text editor, and a lot more coming up!

MichaelBear 6 Dec 25, 2021
Bear-Shell is a shell based in the terminal or command prompt.

Bear-Shell is a shell based in the terminal or command prompt. You can navigate files, run python files, create files via the BearUtils text editor, and a lot more coming up!

MichaelBear 6 Dec 25, 2021
ICMP Reverse Shell written in Python 3 and with Scapy (backdoor/rev shell)

icmpdoor - ICMP Reverse Shell icmpdoor is an ICMP rev shell written in Python3 and scapy. Tested on Ubuntu 20.04, Debian 10 (Kali Linux), and Windows

Jeroen van Kessel 206 Dec 29, 2022
iTerm2 Shell integration for Xonsh shell.

iTerm2 Shell Integration iTerm2 Shell integration for Xonsh shell. Installation To install use pip: xpip install xontrib-iterm2 # or: xpip install -U

Noorhteen Raja NJ 6 Dec 29, 2022
xonsh is a Python-powered, cross-platform, Unix-gazing shell

xonsh is a Python-powered, cross-platform, Unix-gazing shell language and command prompt.

xonsh 6.7k Dec 31, 2022
adds flavor of interactive filtering to the traditional pipe concept of UNIX shell

percol __ ____ ___ ______________ / / / __ \/ _ \/ ___/ ___/ __ \/ / / /_/ / __/ / / /__/ /_/ / / / .__

Masafumi Oyamada 3.2k Jan 7, 2023
xonsh is a Python-powered, cross-platform, Unix-gazing shell language and command prompt.

xonsh xonsh is a Python-powered, cross-platform, Unix-gazing shell language and command prompt. The language is a superset of Python 3.6+ with additio

xonsh 6.7k Jan 8, 2023
Fetch is use to get information about anything on the shell using Wikipedia.

Fetch Search wikipedia article on command line [Why This?] [Support the Project] [Installation] [Configuration] Why this? Fetch helps you to quickly l

Yash Singh 340 Dec 18, 2022
A simple reverse shell in python

RevShell A simple reverse shell in python Getting started First, start the server python server.py Finally, start the client (victim) python client.py

Lojacopsen 4 Apr 6, 2022
a-shell: A terminal for iOS, with multiple windows

a-shell: A terminal for iOS, with multiple windows

Nicolas Holzschuch 1.7k Jan 2, 2023
A simple python implementation of a reverse shell

llehs A python implementation of a reverse shell. Note for contributors The project is open for contributions and is hacktoberfest registered! llehs u

Archisman Ghosh 2 Jul 5, 2022
Just a shell writed on Python

HIGHSHELL (also hSH or HS) Just a shell writed on Python Send bug report • How to use the shell • Broked features • Licenses How to use the shell Inst

0LungSkill0 2 Jan 4, 2022
A Reverse Shell Python Packages

A Reverse Shell Python Packages

null 1 Nov 3, 2021
The Pythone Script will generate a (.)sh file with reverse shell codes then you can execute the script on the target

Pythone Script will generate a (.)sh file with reverse shell codes then you can execute the script on the targetPythone Script will generate a (.)sh file with reverse shell codes then you can execute the script on the target

Boy From Future 15 Sep 16, 2022
A communist shell written in Python

kash A communist shell written in Python It doesn't support escapes, quotes, comment lines, |, &&, >, >> or similar yet. If you need help, get it from

Çınar Yılmaz 1 Dec 10, 2021
A web shell client written in python.

Webshell client A webshell client written in python. Only works well for linux for the time being. Why? Because there are too many heavy webshells. So

tchar 1 Dec 7, 2021
A begginer reverse shell tool python.

A begginer reverse shell tool python. Este programa é para apenas estudo e conhecimento. Não use isso em outra pessoas. Não me responsabilizo por uso

Dio brando 2 Jan 5, 2022
A begginer reverse shell tool python.

A begginer tools for hacking. The theme of this repository is to bring some ready-made open-source tools for anyone new to the world of hacking. This

Dio brando 2 Jan 5, 2022
Projeto Reverse Shell For Python

Use com sabedoria!!! Modo de uso: Linux (inclui Android e Mac): - apt-get update - apt install python3 (ou "python" apenas) - git clone https://github

null 1 Jan 3, 2022