Welcome to the VanDyke Software Forums

Join the discussion today!


Go Back   VanDyke Software Forums > Scripting

Notices

Closed Thread
 
Thread Tools Rate Thread Display Modes
  #1  
Old 10-11-2017, 12:59 PM
jdev's Avatar
jdev jdev is offline
VanDyke Technical Support
 
Join Date: Nov 2003
Location: Albuquerque, NM
Posts: 1,099
Post Example: Python - Importing custom modules referencing the 'crt' object

These examples provide techniques for importing your custom-written python modules that need to reference the crt scripting object.
To be clear, this approach does not allow scripts running outside of SecureCRT to access the crt scripting object. The crt script object is not available to any process outside of the SecureCRT process itself. SecureCRT populates the script engine with the crt object at runtime; so unless SecureCRT is running the script itself, there is no crt object available to any script engine.

This approach simply allows you to modularize elements of your existing SecureCRT scripts -- scripts that must continue to be run from within the SecureCRT process itself.

The main script (which imports the module code) performs this sequence of actions:
  1. sys.dont_write_bytecode = True
    This statement is used to PREVENT python from automatically creating .PYC files. Otherwise, coding, testing, and revising your module's functionality would prove cumbersome and confusing since python imports the .PYC file (which doesn't reflect your current code) if it exists.

  2. del(sys.modules['crt_Module'])
    The python environment is initialized only once in SecureCRT at startup, and remains as-is until the SecureCRT process terminates. This means that once you run a script which imports a module, that module is in the sys.modules table for the lifetime of the SecureCRT process. If you are in the process of developing and testing a module, code changes you make will not be reflected unless you either:
    1. Restart SecureCRT
      or
    2. Use the del(sys.modules['crt_Module']) statement to remove the module from the sys.modules table so that it can be imported a-fresh.

  3. import crt_Module
    This is the line of code that tells the python interpreter to import your module code, if it's not already in the sys.modules table.

  4. "Injects" the crt object into the module (so that statements within the module that reference the crt object won't result in an error). In this pair of example scripts,
    • the crt_Module.py module code defines a method as Inject_crt_Object(obj_crt_API), which allows the crt application programming interface known to the main script to be used within the module code itself.
    • the main script's .py code (following the del(sys.modules['crt_Module']) and import(crt_module) statements) calls the module's Inject_crt_Object method, passing in its copy of the crt object, as in: Inject_crt_Object(crt)

Files attached here include:
  • ImportModuleWith_crt_Reference.py.txt
    This is the main python script code. It imports the crt_Module code. Updated 12 Aug, 2021 to work in either Python 2.7 or 3.x.

  • crt_Module.py.txt
    This file contains the module code itself. This module is imported by the main script code.
Attached Files
File Type: txt ImportModuleWith_crt_Reference.py.txt (4.7 KB, 4631 views)
File Type: txt crt_Module.py.txt (953 Bytes, 4323 views)
__________________
Jake Devenport
VanDyke Software
Technical Support
YouTube Channel: https://www.youtube.com/vandykesoftware
Email: support@vandyke.com
Web: https://www.vandyke.com/support

Last edited by jdev; 09-23-2021 at 04:46 PM. Reason: Add clarity to the purpose behind this posting. The nature of SecureCRT scripting hasn't changed to be externally accessible.
Closed Thread

Tags
example script , scripting , securecrt

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -6. The time now is 06:46 PM.