Run Python in Sublime Text from outside of Sublime Text
Project description
sublime-harness
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.
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.