Skip to main content

Run Python in Sublime Text from outside of Sublime Text

Project description

sublime-harness

Build Status

Run Python in Sublime Text from outside of Sublime Text

sublime-harness was built to allow for execution of arbitrary Python within the context of Sublime Text. It is also part of the Sublime plugin tests framework.

Currently, only Linux is supported but OSX and Windows support are planned.

Deprecation notice

We have decided to deprecate sublime-harness in favor of randy3k/UnitTesting.

It has greater platform support and a less brittle design for local development.

https://github.com/randy3k/UnitTesting

Getting Started

Install the module with: pip install sublime_harness

import os, time
from sublime_harness import Harness

harness = Harness()
script = """
import sublime

# Harness will run the `run` function
def run():
    with open('/tmp/hi', 'w') as f:
        f.write('Hello World!')
    sublime.run_command('exit')"""
harness.run(script)

# Wait for our file to exist (Sublime Text is forked and not synchronous)
output_file = '/tmp/hi'
while (not os.path.exists(output_file) or
       os.stat(output_file).st_size == 0):
    time.sleep(0.1)

# Read our data
with open(output_file) as f:
  print f.read()  # Hello World!

Documentation

sublime_harness provides the Harness class for all your bootstrapping needs.

Sublime Text will be resolved via sublime-info, which allows for overriding via environment variables.

Harness.__init__

Harness()
"""Generate a new Harness for Sublime Text

When initialized, `Harness` allocates a directory (currently,
same for all harnesses) for your script.
"""

Harness.directory

harness.directory
"""Directory where `run` will be execute

If you would like to load relative modules, they should be copied to this directory."""

Harness.run

harness.run(script)
"""Python to execute within the context of Sublime Text

**YOU MUST CLEAN UP AFTER RUNNING THIS METHOD VIA `close`**

You can only run one harness at a time due to the lack of namespacing.

:param script: Python to execute within Sublime Text
:type script: str
"""

Harness.close

harness.close()
"""Cleans up harness files"""

Examples

As mentioned within Harness.dictionary, external files can be loaded relatively to the script. This is an example of how to set up and use them.

# Set up a new harness
import os, time
from sublime_harness import Harness
harness = Harness()

# Copy over a local file to the directory
dest_hello_path = harness.directory + '/hello.py'
with open(dest_hello_path, 'w') as f:
  f.write('hello = "World!"')

# Generate and run our temporary task
script = """
import os
import sublime

try :
    from hello import hello  # ST 2 compatible
except:
    from .hello import hello  # ST 3 compatible

def run():
    with open('/tmp/hi-directory', 'w') as f:
        f.write(hello)
    sublime.run_command('exit')
"""

harness.run(script)
output_file = '/tmp/hi-directory'
while (not os.path.exists(output_file) or
       os.stat(output_file).st_size == 0):
    time.sleep(0.1)

# Grab the file output
with open(output_file) as f:
    print f.read() # 'World!'

# Remove the plugin and our file
harness.close()
os.unlink(dest_hello_path)

Contributing

In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Test via nosetests.

Donating

Support this project and others by twolfson via gittip.

Support via Gittip

Unlicense

As of Oct 16 2013, Todd Wolfson has released this repository and its contents to the public domain.

It has been released under the UNLICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for sublime_harness, version 1.0.0
Filename, size File type Python version Upload date Hashes
Filename, size sublime_harness-1.0.0.tar.gz (8.9 kB) File type Source Python version None Upload date Hashes View hashes
Filename, size sublime_harness-1.0.0.zip (17.8 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page