VirtualBox

Changeset 47979 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Aug 21, 2013 6:44:35 PM (11 years ago)
Author:
vboxsync
Message:

vboxapi.py: Some cleaning up. New features: Documentation. ;-) Dropped the session manager class as it served no purpose I could fathom.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxShell/vboxshell.py

    r47848 r47979  
    1 #!/usr/bin/python
    2 
     1#!/usr/bin/env python
     2# -*- coding: utf-8 -*-
     3# $Id$
     4"""
     5VirtualBox Python Shell.
     6
     7This program is a simple interactive shell for VirtualBox. You can query
     8information and issue commands from a simple command line.
     9
     10It also provides you with examples on how to use VirtualBox's Python API.
     11This shell is even somewhat documented, supports TAB-completion and
     12history if you have Python readline installed.
     13
     14Finally, shell allows arbitrary custom extensions, just create
     15.VirtualBox/shexts/ and drop your extensions there.
     16                                               Enjoy.
     17
     18P.S. Our apologies for the code quality.
     19"""
     20
     21__copyright__ = \
    322"""
    423Copyright (C) 2009-2013 Oracle Corporation
     
    1231hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
    1332"""
    14 
    15 #################################################################################
    16 # This program is a simple interactive shell for VirtualBox. You can query      #
    17 # information and issue commands from a simple command line.                    #
    18 #                                                                               #
    19 # It also provides you with examples on how to use VirtualBox's Python API.     #
    20 # This shell is even somewhat documented, supports TAB-completion and           #
    21 # history if you have Python readline installed.                                #
    22 #                                                                               #
    23 # Finally, shell allows arbitrary custom extensions, just create                #
    24 # .VirtualBox/shexts/ and drop your extensions there.                           #
    25 #                                                Enjoy.                         #
    26 ################################################################################
     33__version__ = "$Revision$"
     34
    2735
    2836import os, sys
     
    3543from pprint import pprint
    3644
     45
     46
     47#
     48# Global Variables
     49#
    3750g_fBatchMode = False
    3851g_sScriptFile = None
     
    4760g_sPrompt = "vbox> "
    4861
    49 g_fHasColors = True
    50 g_aTermColors = {
    51     'red':'\033[31m',
    52     'blue':'\033[94m',
    53     'green':'\033[92m',
    54     'yellow':'\033[93m',
    55     'magenta':'\033[35m',
    56     'cyan':'\033[36m'
    57     }
     62g_fHasColors  = True
     63g_dTermColors = {
     64    'red':      '\033[31m',
     65    'blue':     '\033[94m',
     66    'green':    '\033[92m',
     67    'yellow':   '\033[93m',
     68    'magenta':  '\033[35m',
     69    'cyan':     '\033[36m'
     70}
     71
     72
     73
    5874def colored(strg, color):
    5975    """
     
    6278    if not g_fHasColors:
    6379        return strg
    64     col = g_aTermColors.get(color, None)
     80    col = g_dTermColors.get(color, None)
    6581    if col:
    6682        return col+str(strg)+'\033[0m'
    67     else:
    68         return strg
     83    return strg
    6984
    7085if g_fHasReadline:
     
    238253
    239254def startVm(ctx, mach, vmtype):
    240     mgr = ctx['mgr']
    241255    vbox = ctx['vb']
    242256    perf = ctx['perf']
    243     session = mgr.getSessionObject(vbox)
     257    session = ctx['global'].getSessionObject(vbox)
    244258    progress = mach.launchVMProcess(session, vmtype, "")
    245259    if progressBar(ctx, progress, 100) and int(progress.resultCode) == 0:
     
    670684    try:
    671685        vbox = ctx['vb']
    672         session = ctx['mgr'].getSessionObject(vbox)
     686        session = ctx['global'].getSessionObject(vbox)
    673687        mach.lockMachine(session, ctx['global'].constants.LockType_Shared)
    674688    except Exception, e:
     
    34713485
    34723486def main(argv):
    3473     style = None
    3474     params = None
    3475     autopath = False
    3476     script_file = None
     3487
     3488    #
     3489    # Parse command line arguments.
     3490    #
    34773491    parse = OptionParser()
    34783492    parse.add_option("-v", "--verbose", dest="verbose", action="store_true", default=False, help = "switch on verbose")
     
    34953509        g_fHasReadline = False
    34963510        g_sCmd = options.command_line
     3511
     3512    params = None
    34973513    if options.opt_line is not None:
    34983514        params = {}
     
    35023518            (key, value) = strparam.split('=')
    35033519            params[key] = value
    3504     else:
    3505         params = None
    35063520
    35073521    if options.autopath:
    35083522        cwd = os.getcwd()
    35093523        vpp = os.environ.get("VBOX_PROGRAM_PATH")
    3510         if vpp is None and (os.path.isfile(os.path.join(cwd, "VirtualBox")) or os.path.isfile(os.path.join(cwd, "VirtualBox.exe"))) :
     3524        if    vpp is None \
     3525          and (   os.path.isfile(os.path.join(cwd, "VirtualBox")) \
     3526               or os.path.isfile(os.path.join(cwd, "VirtualBox.exe")) ):
    35113527            vpp = cwd
    35123528            print "Autodetected VBOX_PROGRAM_PATH as", vpp
     
    35163532        if vsp is None and os.path.isfile(os.path.join(cwd, "sdk", "bindings", "VirtualBox.xidl")) :
    35173533            vsp = os.path.join(cwd, "sdk")
    3518         if vsp is None and os.path.isfile(os.path.join(vpp, "sdk", "bindings", "VirtualBox.xidl")) :
     3534        if vsp is None and vpp is not None and os.path.isfile(os.path.join(vpp, "sdk", "bindings", "VirtualBox.xidl")) :
    35193535            vsp = os.path.join(vpp, "sdk")
    35203536        if vsp is not None :
     
    35223538            os.environ["VBOX_SDK_PATH"] = vsp
    35233539
     3540    #
     3541    # Set up the shell interpreter context and
     3542    #
    35243543    from vboxapi import VirtualBoxManager
    3525     virtualBoxManager = VirtualBoxManager(style, params)
    3526     ctx = {'global':virtualBoxManager,
    3527            'mgr':virtualBoxManager.mgr,
    3528            'vb':virtualBoxManager.vbox,
    3529            'const':virtualBoxManager.constants,
    3530            'remote':virtualBoxManager.remote,
    3531            'type':virtualBoxManager.type,
    3532            'run': lambda cmd, args: runCommandCb(ctx, cmd, args),
    3533            'guestlambda': lambda uuid, guestLambda, args: runGuestCommandCb(ctx, uuid, guestLambda, args),
    3534            'machById': lambda uuid: machById(ctx, uuid),
    3535            'argsToMach': lambda args: argsToMach(ctx, args),
    3536            'progressBar': lambda p: progressBar(ctx, p),
    3537            'typeInGuest': typeInGuest,
    3538            '_machlist': None,
    3539            'prompt': g_sPrompt,
    3540            'scriptLine': 0,
    3541            'interrupt': False
    3542            }
     3544    oVBoxMgr = VirtualBoxManager(style, params)
     3545    ctx = {
     3546        'global':       oVBoxMgr,
     3547        'vb':           oVBoxMgr.vbox,
     3548        'const':        oVBoxMgr.constants,
     3549        'remote':       oVBoxMgr.remote,
     3550        'type':         oVBoxMgr.type,
     3551        'run':          lambda cmd, args: runCommandCb(ctx, cmd, args),
     3552        'guestlambda': lambda uuid, guestLambda, args: runGuestCommandCb(ctx, uuid, guestLambda, args),
     3553        'machById':    lambda uuid: machById(ctx, uuid),
     3554        'argsToMach':  lambda args: argsToMach(ctx, args),
     3555        'progressBar': lambda p: progressBar(ctx, p),
     3556        'typeInGuest': typeInGuest,
     3557        '_machlist':    None,
     3558        'prompt':      g_sPrompt,
     3559        'scriptLine':  0,
     3560        'interrupt':    False,
     3561    }
    35433562    interpret(ctx)
    3544     virtualBoxManager.deinit()
    3545     del virtualBoxManager
     3563    oVBoxMgr.deinit()
     3564    del oVBoxMgr
    35463565
    35473566if __name__ == '__main__':
    35483567    main(sys.argv)
     3568
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette