To keep the script simple you can split the script into several smaller scripts.
For instance you could have all your function definitions in a script of their own.
To access those functions you would import the script containing your functions into your main script the same as we have been doing for Python’s inbuilt modules such as “math”.
The script you import must have a filename that is a valid Python identifier so cannot start with a number and use only letters or numbers or the underscore, ‘_’.
The script file must have the extension ".py".
The script you import must not have any executing code or only have executing code in an “if __name__== “__main__”:” block.
For Metasequoia 4 the script or scripts you import must be in the same folder with the main script.
If you use Metasequoia’s MQSystem classes in the script you import, in that script you must explicitly import the MQSystem module as follows or you will get errors.
import MQSystem
Here is a script that defines a function named “adder” to add two numbers and then print the sum to the output.
''' Metasequoia Python script type a description here ''' # imports # global variables doc = MQSystem.getDocument() # function definitions def mqprint(message): try: print(message) except: MQSystem.println(repr(message)) return def adder(x, y): return x + y # main script function def main(): a = 3 b = 7 total = adder(a, b) mqprint(total) return if __name__ == "__main__": # clear output window MQSystem.clearLog() # run main function main() # let user know script finished mqprint("Script finished")
The output from the script is shown below.
10 Script finished
We can write the “adder” function in another Python script file named “mymodule.py”.
# mymodule.py def adder(x, y): return x + y
We delete the “adder” function definition from the main script and instead import it from “mymodule.py”.
To use the function notice how we have to prefix it with “mymodule” and then a full stop (dot) ‘.’.
''' Metasequoia Python script type a description here ''' # imports # import mymodule module to use adder function # when importing a module omit the .py extension import mymodule ## new # global variables doc = MQSystem.getDocument() # function definitions def mqprint(message): try: print(message) except: MQSystem.println(repr(message)) return # main script function def main(): a = 3 b = 7 total = mymodule.adder(a, b) ## new mqprint(total) return if __name__ == "__main__": # clear output window MQSystem.clearLog() # run main function main() # let user know script finished mqprint("Script finished")
The output from the new main script is the same as before.
10 Script finished
Remember to import Python modules such as "math" in the script you import if it needs them.
This post [link] explains some of the basics of using Metasequoia’s Script Editor.
UPDATE 6 June 2018:
So Python can find your module to import, the path to your module has to be made known to Python. Metasequoia does this automatically but gets the path only from the first script you open and run for the session.
To see which folders Python knows to search for modules use the command print(sys.path).
If you open another script that imports a module from a different folder than your first script, Python will be unable to find that module and gives a "module not found" error. This behaviour may be corrected in Metasequoia 4.6.6 but if you are using an earlier version you should add the following code to the first line of your script that imports another module.
sys.path.append("C:/../path")
Where you replace C:/../path with your actual path to your imported python file. Use forward slashes for the path or escaped backslashes, e.g C:\\..\\path.
Metasequoia's script editor automatically imports the sys module so you don't have to import it explicitly.
Note that adding this line of code isn't portable, it will need to be changed if import module is moved to a different folder.
A more portable solution if the imported modules are in the same folder as the main script is to add the following code before you import your module.
import os
sys.path.append(os.getcwd())
No comments:
Post a Comment