Python Tools
Mostly console apps in Python, that is singular Python tools, also see PythonToolSets.
https://docs.python.org/2/howto/curses.html
All Platforms
IPython
Almost a standard in its own right.
https://en.wikipedia.org/wiki/IPython
IPython is a command shell for interactive computing in multiple programming languages, originally developed for the Python programming language, that offers introspection, rich media, shell syntax, tab completion, and history. IPython provides the following features:
Interactive shells (terminal and Qt-based).
A browser-based notebook with support for code, text, mathematical expressions, inline plots and other media.
Support for interactive data visualization and use of GUI toolkits.
Flexible, embeddable interpreters to load into one's own projects.
Tools for parallel computing.
The notebook capability runs on PythonTornado.
https://github.com/ipython/ipython
... The Notebook, Qt console and a number of other pieces are now parts of Jupyter. See the Jupyter installation docs if you want to use these ...
The Jupyter Notebook is a web application that allows you to create and share documents that contain live code, equations, visualizations and explanatory text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, machine learning and much more.
https://pypi.python.org/pypi/jupyter
http://jupyter.readthedocs.org/en/latest/index.html
The fine print ... mostly the same a IPython itself.
https://github.com/jupyter/notebook/blob/master/setup.py
install_requires = [
'jinja2', 'tornado>=4', 'ipython_genutils', 'traitlets', 'jupyter_core', 'jupyter_client', 'nbformat', 'nbconvert', 'ipykernel', # bless IPython kernel for now
]
In any case, IPython uses a lot of subprocess module stuff [ "tools for parallel computing" ] so Windows is not quite as clean a Linux ... as usual.
Installation dependencies, most are generally useful and are required by many other python packages.
https://ipython.org/ipython-doc/2/install/install.html
jinja2, needed for the notebook
sphinx, needed for nbconvert
pyzmq, needed for IPython’s parallel computing features, qt console and notebook
pygments, used by nbconvert and the Qt console for syntax highlighting
tornado, needed by the web-based notebook
nose, used by the test suite
readline (on OS X) or pyreadline (on Windows), needed for the terminal
PyReadline
https://ipython.org/ipython-doc/2/install/install.html#windows
... IPython by default runs in a terminal window, but the normal terminal application supplied by Microsoft Windows is very primitive. You may want to download the excellent and free Console application instead, which is a far superior tool.
https://pypi.python.org/pypi/pyreadline
PyReadline is part of IPython. Windows only ... In the not too distant past, I had trouble running PyReadline on Windows ( the console readline function has been a consistent irritation over the years ), but the developers say it runs on Windows systems. Haven't tried it yet.
http://pythonhosted.org/pyreadline/introduction.html#a-python-implementation-of-gnu-readline
Pyreadline is a package inspired by GNU readline which aims to improve the command line editing experience. In most UNIX based pythons GNU readline is available and used by python but on windows this is not the case.
Pexpect
Pexpect is a powerful command-level integration tool, but was missing in this category for a long time. It couldn't run on Windows without a Cygwin dependency. So ... it works on Linux-like systems only, too bad from an integration perspective.
However, as of Pexpect version 4.0:
Pexpect can be used on Windows and POSIX systems. However, pexpect.spawn and pexpect.run() are only available on POSIX, where the pty module is present in the standard library.
http://pexpect.readthedocs.org/en/stable/install.html
Now the bad news ...
Pexpect can be used on Windows to wait for a pattern to be produced by a child process, using pexpect.popen_spawn.PopenSpawn?, or a file descriptor, using pexpect.fdpexpect.fdspawn. This should be considered experimental for now.
pexpect.spawn and pexpect.run() are not available on Windows, as they rely on Unix pseudoterminals (ptys). Cross platform code must not use these.
Not ideal, in fact seems to be barely usable, but the hope of 'quick and easy' workarounds looms in the near future.
PyPi - https://pypi.python.org/pypi/pexpect/
Docs - http://pexpect.readthedocs.org/en/stable/
Repos - https://github.com/pexpect/pexpect
... Pexpect is a pure Python module for spawning child applications; controlling them; and responding to expected patterns in their output. Pexpect works like Don Libes' Expect. Pexpect allows your script to spawn a child application and control it as if a human were typing commands ...
Helpful - http://helpful.knobs-dials.com/index.php/Python_usage_notes/pty_and_pexpect_notes
Good example of using for network admin - http://blog.pythonicneteng.com/2012/11/pexpect-module.html
Current (2016/4/10) dev version says:
https://github.com/pexpect/pexpect/blob/master/pexpect/screen.py
warnings.warn(("pexpect.screen and pexpect.ANSI are deprecated. "
"We recommend using pyte to emulate a terminal screen: " "https://pypi.python.org/pypi/pyte"), stacklevel=2)
More compatible with Windows ?
pyte
https://pypi.python.org/pypi/pyte
http://pyte.readthedocs.org/en/latest/
https://github.com/selectel/pyte
https://github.com/selectel/pyte/blob/master/setup.py
setup(name="pyte", ...
install_requires=wcwidth?,
setup_requires=pytest-runner?,
tests_require=["pytest"
See https://pypi.python.org/pypi/wcwidth and https://github.com/jquast/wcwidth
This Library is mainly for those implementing a Terminal Emulator, or programs that carefully produce output to be interpreted by one.
psutil
https://github.com/giampaolo/psutil
"psutil (python system and process utilities) is a cross-platform library for retrieving information on running processes and system utilization (CPU, memory, disks, network) in Python."
- useful mainly for system monitoring, profiling and limiting process resources and management of running processes.
- implements many functionalities offered by command line tools such as:
- ps, top, lsof,
- netstat, ifconfig, pmap.
- who, df, kill, free,
- nice, ionice, iostat, iotop,
- uptime, pidof, tty, taskset,
- currently supports Linux, Windows, OSX, FreeBSD and Sun Solaris, both 32-bit and 64-bit architectures, with Python versions from 2.4 to 3.4. PyPy is also known to work.
https://pypi.python.org/pypi/psutil
https://github.com/giampaolo/psutil
https://pythonhosted.org/psutil/
Extra! -> http://grodola.blogspot.com/search/label/psutil
Sunday, November 6, 2016
OK, this is a big one. Starting from psutil 5.0.0 you can query multiple Process information around twice as fast than with previous versions ...
Circus
Windows ??? Uses psutil, also requires pyzmq and tornado.
https://pypi.python.org/pypi/circus
Circus is a program that runs and watches processes and sockets. Circus can be used as a library or through the command line.
http://circus.readthedocs.org/en/latest/
... Circus provides a command-line script call circusd that can be used to manage processes organized in one or more watchers ...
http://circus.readthedocs.org/en/latest/tutorial/step-by-step/#examples
Circus is tested on Mac OS X and Linux with the latest Python 2.6, 2.7, 3.2 and 3.3. To run a full Circus, you will also need libzmq, libevent & virtualenv.
Not Windows apparently, not sure why.
Glances
https://pypi.python.org/pypi/Glances
https://github.com/nicolargo/glances
Glances is a cross-platform curses-based system monitoring tool written in Python. It uses the psutil library to get information from your system.
Also integrated with PythonBottle ...
CMD2
Useful Python console extension, if a bit limited. It's small, 64K.
https://pypi.python.org/pypi/cmd2
Enhancements for standard library’s cmd module.
Drop-in replacement adds several features for command-prompt tools
Some IPython like features
CMD3
Interesting approach, but only works with PythonGridComputing#CloudMesh
https://pypi.python.org/pypi/cmd3
cmd3 - A dynamic CMD shell with plugins ...
cmd is an extension for the CMD class with the following features:
commands are loaded from plugin directories
usage of docopts as part of the command creation
variable substitution
execution of python commands
scripts loadable from a script directory
http://cloudmesh.github.io/cmd3/
https://github.com/cloudmesh/cmd3
File / Directory Modules
Python OS File Mehtods
http://www.tutorialspoint.com/python/os_file_methods.htm
File / Directory Watchers
WatchDog
https://pypi.python.org/pypi/watchdog
Python API library and shell utilities to monitor file system events.
Directory monitoring made easy with: a cross-platform API and a shell tool to run commands in response to directory changes.
https://github.com/gorakhargosh/watchdog
Depends on: PyYAML, argh, pathtools
http://pythonhosted.org//watchdog/
The following example program will monitor the current directory recursively for filesystem changes and simply log them to the console: import sys import time import logging from watchdog.observers import Observer from watchdog.events import LoggingEventHandler if __name__ == "__main__": logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') path = sys.argv[1] if len(sys.argv) > 1 else '.' event_handler = LoggingEventHandler() observer = Observer() observer.schedule(event_handler, path, recursive=True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
http://stackoverflow.com/questions/18599339/python-watchdog-monitoring-file-for-changes
Instead of LoggingEventHandler? define your handler:
#!/usr/bin/python import time from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler class MyHandler(FileSystemEventHandler): def on_modified(self, event): print "Got it!" if __name__ == "__main__": event_handler = MyHandler() observer = Observer() observer.schedule(event_handler, path='.', recursive=False) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
on_modified is called when a file or directory is modified.
http://sysmagazine.com/posts/140649/
from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler class Handler(FileSystemEventHandler): def on_created(self, event): print event def on_deleted(self, event): print event def on_moved(self, event): print event if __name__ == "__main__": observer = Observer() observer.schedule(Handler(), path='/path/to/smth', recursive=True) observer.start() try: while True: time.sleep(0.1) except KeyboardInterrupt: observer.stop() observer.join()
On an output of a script we had:
<DirCreatedEvent: src_path=/path/to/smth/foo> <FileCreatedEvent: src_path=/path/to/smth/bar> <FileMovedEvent: src_path=/path/to/smth/bar, dest_path=/path/to/smth/baz> <DirCreatedEvent: src_path=/path/to/smth/foo/foz> <FileMovedEvent: src_path=/path/to/smth/baz, dest_path=/path/to/smth/foo/quz> <FileCreatedEvent: src_path=/path/to/smth/hw> <FileDeletedEvent: src_path=/path/to/smth/foo/quz> ...
http://brunorocha.org/python/watching-a-directory-for-file-changes-with-python.html
Interesting:
http://ginstrom.com/scribbles/2012/05/10/continuous-integration-in-python-using-watchdog/
I use watchdog to run continuous integration on my projects: every time a file changes (e.g. is saved, deleted, or created) in the directory I am watching, a script will automatically run unit tests, compile libraries, build docs, and run other tests, as necessary.
http://blog.philippklaus.de/2011/08/watching-directories-for-changes-using-python_-_an-overview/
Good cross-platform info.
Other File Watchers
https://github.com/mkaz/fswatch
Python script that monitors a Mac OS X folder and on change syncs with remote site
https://code.google.com/p/pyfilesystem/
Dependencies: boto, paramiko, six, django, dexml, wx
https://github.com/gregghz/Watcher - enough ?
PyQT,QFileSystemWatcher: Detect Changes in a Directory QFileSystemWatcher
Summary : This example shows how to detect directory changes with QFileSystemWatcher in PyQT. This code simply watches "/home/developer/Desktop" directory and shows in QLabel if any change has been made in directory(If any of its contents is changed or removed).
https://github.com/mdipierro/workflow
workflow.py is a minimalist [ sub-minimalist? ] file based workflow engine. It runs as a background process and can automate certain tasks such as deleting old files, emailing you when new files are created or run a script to process new files.
SSH Tools
Fabric
Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
Fabric Documentation | http://docs.fabfile.org/en/1.10/ |
How to use Fabric | http://www.pythonforbeginners.com/systems-programming/how-to-use-fabric-in-python/ |
From http://docs.fabfile.org/en/1.10/tutorial.html
"Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
More specifically, Fabric is:
A tool that lets you execute arbitrary Python functions via the command line; A library of subroutines (built on top of a lower-level library) to make executing shell commands over SSH easy and Pythonic.
Naturally, most users combine these two things, using Fabric to write and execute Python functions, or tasks, to automate interactions with remote servers."
From http://www.fabfile.org/:
It provides a basic suite of operations for executing local or remote shell commands (normally or via sudo) and uploading/downloading files, as well as auxiliary functionality such as prompting the running user for input, or aborting execution.
Typical use involves creating a Python module containing one or more functions, then executing them via the fab command-line tool.
Below is a small but complete “fabfile” containing a single task:
from fabric.api import run def host_type(): run('uname -s')
Once a task is defined, it may be run on one or more servers, like so:
$ fab -H localhost,linuxbox host_type [localhost] run: uname -s [localhost] out: Darwin [linuxbox] run: uname -s [linuxbox] out: Linux Done. Disconnecting from localhost... done. Disconnecting from linuxbox... done.
In addition to use via the fab tool, Fabric’s components may be imported into other Python code, providing a Pythonic interface to the SSH protocol suite at a higher level than that provided by e.g. the Paramiko library (which Fabric itself uses.)
Installing Fabric On Windows
From http://www.fabfile.org/installing.html:
Windows users who already have ActiveState’s ActivePython distribution installed may find Fabric is best installed with its package manager, PyPM.
Below is example output from an installation of Fabric via pypm:
C:\> pypm install fabric The following packages will be installed into "%APPDATA%\Python" (2.7): paramiko-1.7.8 pycrypto-2.4 fabric-1.3.0 Get: [pypm-free.activestate.com] fabric 1.3.0 Get: [pypm-free.activestate.com] paramiko 1.7.8 Get: [pypm-free.activestate.com] pycrypto 2.4 Installing paramiko-1.7.8 Installing pycrypto-2.4 Installing fabric-1.3.0 Fixing script %APPDATA%\Python\Scripts\fab-script.py C:\>
I have no problem installing Fabric on Windows with ActivePython? (w/ PyPM):
C:\> pypm install fabric Ready to perform these actions: The following packages will be installed: fabric-0.9.0 pycrypto-2.0.1 Get: [pypm.activestate.com] fabric 0.9.0-1 Get: [pypm.activestate.com] pycrypto 2.0.1-1 Installing fabric-0.9.0 Fixing script C:\Users\sridharr\AppData\Roaming\Python\Scripts\fab-script.py Installing pycrypto-2.0.1
Getting Python Fabric setup in Windows - May 30th, 2013
http://thepracticalsysadmin.com/getting-python-fabric-setup-in-windows/
It seems like the Python integration in Windows is very different than it is in the Linux world where everything is all bundled up nice and neatly.
There are several separate, seemingly unrelated pieces that all need to fit together to get Python and Fabric working correctly in a Windows environment ...
I recommend going with Python 2.7, rather than 3.3 because it has much better backwards compatibility ...
The solution to getting fabric running on Windows 7:
easy_install fabric
manually install pycrypto-2.0.1.win-amd64-py2.6.exe from: http://www.voidspace.org.uk/python/modules.shtml
manually install pywin32-214.win-amd64-py2.6.exe from: http://sourceforge.net/projects/pywin32/files/
Pip still doesn’t work quite right when attempting to install various Python packages. To get that part working you will need MinGW32 installed ( http://www.mingw.org/wiki/InstallationHOWTOforMinGW ) ...
Other Tools
Bazaar
Bazaar is a relatively quick and easy distributed revision system written in Python ( if there is such a thing as a 'quick and easy distributed' anything ) from Canonical, as in Ubuntu Linux. Runs well on Windows too.
A mature, active and well supported project. See RevisionControl#Bazaar.
The source code as of Jan 2017 is at http://bazaar.launchpad.net/~bzr-pqm/bzr/bzr.dev/files. Very clean and Pythonic, good use of comprehensions, etc.
Has both a decent GUI and lots of little line command scripts, good example of a Python line command environment.
http://bazaar.launchpad.net/~bzr-pqm/bzr/bzr.dev/files/head:/bzrlib/.
Sphinx
https://pypi.python.org/pypi/Sphinx
Sphinx is a tool that makes it easy to create intelligent and beautiful documentation for Python projects (or other documents consisting of multiple reStructuredText sources) ...
...
Among its features are the following:
Output formats: HTML (including derivative formats such as HTML Help, Epub and Qt Help), plain text, manual pages and LaTeX or direct PDF output using rst2pdf
Extensive cross-references: semantic markup and automatic links for functions, classes, glossary terms and similar pieces of information
Hierarchical structure: easy definition of a document tree, with automatic links to siblings, parents and children
Automatic indices: general index as well as a module index
Code handling: automatic highlighting using the Pygments highlighter
Flexible HTML output using the Jinja 2 templating engine
Various extensions are available, e.g. for automatic testing of snippets and inclusion of appropriately formatted docstrings
Setuptools integration
Well supported. Nearly a standard in its own right.
Linux Only
fail2ban
http://www.fail2ban.org/wiki/index.php/Main_Page
http://www.fail2ban.org/wiki/index.php/Commands
iotop
http://guichaz.free.fr/iotop/
Other
paramiko
Widely used.
https://pypi.python.org/pypi/paramiko/
SSH2 protocol library
This is a library for making SSH2 connections (client or server). Emphasis is on using SSH2 as an alternative to SSL for making secure connections between python scripts. All major ciphers and hash methods are supported. SFTP client and server mode are both supported too. Required packages: pyCrypto
Also See
https://launchpad.net/rapache
Rapache is a simple tool for remotely managing and configuring an apache2 instance without having to hassle around through configuration files.
Rapache is a python + GTK tool that allows you to configure apache2 and all of its modules ...
Vhost managing
Virtualhost normalization to conform Debian policy
Module managing
Syntax highliting when showing confs source
Config files backup and quick restore Plugin system
SSL Plugin, Basic_Auth plugin, Mono plugin, Logging Plugin
Apache start/stop and status
https://wiki.ubuntu.com/Rapache
Version 0.8 ???