bBox_Python3Run( mode; script {; text; param1; ...} )
Parameters:
mode:
0 = convert both input and output line endings, wait for output
1 = skip conversion of carriage returns (the FileMaker end-of-line marker) to new lines
2 = skip translation of new lines in shell output to carriage returns
3 = don't translate input or ouput line endings
4 = run asynchronously (don't wait for output)
16 = use alternate Python command path
32 = combine Python stdout and stderr output
script: text to be compiled into bytecode
param1…: optional parameters for the python3 command
Result:
text sent to stdout
Error:
bBox_LastError (-3)
Script Step:
bBox Python3 Run [ Mode: Script: Input: Param1: Param2: Param3: ]
––––––––––
First appeared in: 0.90
Examples in demo file: 6
Compatibility: Client, macOS, Server, Ubuntu, WebDirect, WPE
––––––––––
On macOS, this requires the installation of Python Software Foundation's version of Python. On Ubuntu you would typically use apt-get to install it. There is is also an option to use an executable at an alternate path, which may require creating a symlink to the python3 binary you wish to use.
The default Python command paths are:
- macOS: /usr/local/bin/python3
- Ubuntu: /usr/bin/python3
The alternate paths are:
- macOS: /usr/bin/python3
- Ubuntu: /usr/local/bin/python3
Python modules installed on Linux may not be in the default path. If needed, add the following before your import statement:
import sys
sys.path.append('/usr/local/lib/python3.10/dist-packages') # use python3.9 for Ubuntu 20
Use bBoxy_LastError (-3) to get error result. While testing, using a mode of 32 is recommended. This will cause stderr output from Python to be returned as the script step/function result. Otherwise, messages about things like Python syntax errors will be lost, and you will only have the error message returned by bBox_LastError.
Here’s an example:
bBox_Python3Run(32; "y=5/0") & ¶ & bBox_LastError(-1) & ¶ & bBox_LastError(-3)
?
1
Traceback (most recent call last):
File "<string>", line 1, in <module>
y=5/0
~^~
ZeroDivisionError: division by zero
The first value above was the result from the function (“?”), second line was the error number returned by Python3. Finally, the remaining lines are the description of the error that Python sent to stderr.
These calls are thread safe, so you can safely have multiple Python 3 scripts running at the same time. The script step does not support the Python fm module however — for fm methods you’ll need to use the bBox_PythonExecute or bBox_PythonEval functions.
You can pass parameters to Python using the function's optional param parameters. Then in Python, use its sys.argv variable to extract these as needed.
––––––––––