Source code for BinPy.Shell.Shell
from __future__ import print_function
import subprocess
import platform
import os
from BinPy.__init__ import *
try:
from BinPy import __version__ as BINPY_VERSION
except ImportError:
BINPY_VERSION = ""
[docs]def shellclear():
if platform.system() == "Windows":
return
subprocess.call("clear")
[docs]def magic_clear(self, arg):
shellclear()
banner = '+-----------------------------------------------------------+\n'
banner += ' BinPy '
banner += BINPY_VERSION
banner += ' [interactive shell]\n'
banner += '+-----------------------------------------------------------+\n'
banner += '\n'
banner += 'Commands: \n'
banner += '\t"exit()" or press "Ctrl+ D" to exit the shell\n'
banner += '\t"clear()" to clear the shell screen\n'
banner += '\n'
exit_msg = '\n... [Exiting the BinPy interactive shell] ...\n'
[docs]def self_update():
URL = "https://github.com/binpy/binpy/zipball/master"
command = "pip install -U %s" % URL
if os.getuid() == 0:
command = "sudo " + command
returncode = subprocess.call(command, shell=True)
sys.exit()
[docs]def setupIpython():
try:
import IPython
except:
raise("ERROR: IPython Failed to load")
try:
from IPython.config.loader import Config
from IPython.frontend.terminal.embed import InteractiveShellEmbed
cfg = Config()
cfg.PromptManager.in_template = "BinPy:\\#> "
cfg.PromptManager.out_template = "BinPy:\\#: "
bpyShell = InteractiveShellEmbed(config=cfg, banner1=banner,
exit_msg=exit_msg)
bpyShell.define_magic("clear", magic_clear)
except ImportError:
try:
from IPython.Shell import IPShellEmbed
argsv = ['-pi1', 'BinPY:\\#>', '-pi2', ' .\\D.:', '-po',
'BinPy:\\#>', '-nosep']
bpyShell = IPShellEmbed(argsv)
bpyShell.set_banner(banner)
bpyShell.set_exit_msg(exit_msg)
except ImportError:
raise
return bpyShell()
[docs]def run_notebook(mainArgs):
"""Run the ipython notebook server"""
try:
import IPython
except:
raise("ERROR: IPython Failed to load")
try:
from IPython.html import notebookapp
from IPython.html.services.kernels import kernelmanager
except:
from IPython.frontend.html.notebook import notebookapp
from IPython.frontend.html.notebook import kernelmanager
kernelmanager.MappingKernelManager.first_beat = 30.0
app = notebookapp.NotebookApp.instance()
with open('BinPyNotebook0.ipynb', 'a') as new_ipynb:
if (new_ipynb.tell() == 0):
new_ipynb.write(
"""
{
"metadata": {
"name": "",
"signature": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"from BinPy import *"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
}
],
"metadata": {}
}
]
}
"""
)
app.initialize(['BinPyNotebook0.ipynb'])
app.start()
sys.exit()
[docs]def shellMain(*args):
log_level = logging.WARNING
interface = None
if len(sys.argv) > 1 and len(sys.argv[1]) > 1:
flag = sys.argv[1]
print (flag)
if flag == 'update':
print ("Updating BinPy...")
self_update()
elif flag == 'notebook':
run_notebook(['.'])
sys.exit()
if flag in ['--nowarnings', 'nowarnings']:
log_level = logging.INFO
elif flag in ['--debug', 'debug']:
log_level = logging.DEBUG
init_logging(log_level)
shellclear()
bpyShell = setupIpython()