npm i python-shell
1 2 3 4 5 6 |
import {PythonShell} from 'python-shell'; PythonShell.runString('x=1+1;print(x)', null, function (err) { if (err) throw err; console.log('finished'); }); |
Or you can use require like so:
1 |
<span class="pl-k">let</span> <span class="pl-kos">{</span>PythonShell<span class="pl-kos">}</span> <span class="pl-c1">=</span> <span class="pl-en">require</span><span class="pl-kos">(</span><span class="pl-s">'python-shell'</span><span class="pl-kos">)</span> |
Running a Python script:
1 2 3 4 5 6 |
<span class="pl-k">import</span> <span class="pl-kos">{</span><span class="pl-smi">PythonShell</span><span class="pl-kos">}</span> <span class="pl-k">from</span> <span class="pl-s">'python-shell'</span><span class="pl-kos">;</span> <span class="pl-smi">PythonShell</span><span class="pl-kos">.</span><span class="pl-en">run</span><span class="pl-kos">(</span><span class="pl-s">'my_script.py'</span><span class="pl-kos">,</span> <span class="pl-c1">null</span><span class="pl-kos">,</span> <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-s1">err</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">err</span><span class="pl-kos">)</span> <span class="pl-k">throw</span> <span class="pl-s1">err</span><span class="pl-kos">;</span> <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-s">'finished'</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span> |
If the script exits with a non-zero code, an error will be thrown.
Running a Python script with arguments and options:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="pl-k">import</span> <span class="pl-kos">{</span><span class="pl-smi">PythonShell</span><span class="pl-kos">}</span> <span class="pl-k">from</span> <span class="pl-s">'python-shell'</span><span class="pl-kos">;</span> <span class="pl-k">let</span> <span class="pl-s1">options</span> <span class="pl-c1">=</span> <span class="pl-kos">{</span> <span class="pl-c1">mode</span>: <span class="pl-s">'text'</span><span class="pl-kos">,</span> <span class="pl-c1">pythonPath</span>: <span class="pl-s">'path/to/python'</span><span class="pl-kos">,</span> <span class="pl-c1">pythonOptions</span>: <span class="pl-kos">[</span><span class="pl-s">'-u'</span><span class="pl-kos">]</span><span class="pl-kos">,</span> <span class="pl-c">// get print results in real-time</span> <span class="pl-c1">scriptPath</span>: <span class="pl-s">'path/to/my/scripts'</span><span class="pl-kos">,</span> <span class="pl-c1">args</span>: <span class="pl-kos">[</span><span class="pl-s">'value1'</span><span class="pl-kos">,</span> <span class="pl-s">'value2'</span><span class="pl-kos">,</span> <span class="pl-s">'value3'</span><span class="pl-kos">]</span> <span class="pl-kos">}</span><span class="pl-kos">;</span> <span class="pl-smi">PythonShell</span><span class="pl-kos">.</span><span class="pl-en">run</span><span class="pl-kos">(</span><span class="pl-s">'my_script.py'</span><span class="pl-kos">,</span> <span class="pl-s1">options</span><span class="pl-kos">,</span> <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-s1">err</span><span class="pl-kos">,</span> <span class="pl-s1">results</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">err</span><span class="pl-kos">)</span> <span class="pl-k">throw</span> <span class="pl-s1">err</span><span class="pl-kos">;</span> <span class="pl-c">// results is an array consisting of messages collected during execution</span> <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-s">'results: %j'</span><span class="pl-kos">,</span> <span class="pl-s1">results</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span> |
Exchanging data between Node and Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="pl-k">import</span> <span class="pl-kos">{</span><span class="pl-smi">PythonShell</span><span class="pl-kos">}</span> <span class="pl-k">from</span> <span class="pl-s">'python-shell'</span><span class="pl-kos">;</span> <span class="pl-k">let</span> <span class="pl-s1">pyshell</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-smi">PythonShell</span><span class="pl-kos">(</span><span class="pl-s">'my_script.py'</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// sends a message to the Python script via stdin</span> <span class="pl-s1">pyshell</span><span class="pl-kos">.</span><span class="pl-en">send</span><span class="pl-kos">(</span><span class="pl-s">'hello'</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-s1">pyshell</span><span class="pl-kos">.</span><span class="pl-en">on</span><span class="pl-kos">(</span><span class="pl-s">'message'</span><span class="pl-kos">,</span> <span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-s1">message</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-c">// received a message sent from the Python script (a simple "print" statement)</span> <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-s1">message</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// end the input stream and allow the process to exit</span> <span class="pl-s1">pyshell</span><span class="pl-kos">.</span><span class="pl-en">end</span><span class="pl-kos">(</span><span class="pl-k">function</span> <span class="pl-kos">(</span><span class="pl-s1">err</span><span class="pl-kos">,</span><span class="pl-s1">code</span><span class="pl-kos">,</span><span class="pl-s1">signal</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">err</span><span class="pl-kos">)</span> <span class="pl-k">throw</span> <span class="pl-s1">err</span><span class="pl-kos">;</span> <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-s">'The exit code was: '</span> <span class="pl-c1">+</span> <span class="pl-s1">code</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-s">'The exit signal was: '</span> <span class="pl-c1">+</span> <span class="pl-s1">signal</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-smi">console</span><span class="pl-kos">.</span><span class="pl-en">log</span><span class="pl-kos">(</span><span class="pl-s">'finished'</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span> |