npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

node-red-contrib-exec-queue

v1.0.28

Published

A Node-RED alternative exec node that runs template code with a queue.

Readme

Overview

A Node-RED alternative exec node that runs template code with a queue.

Limitations

  • Currently it doesn't work on Windows. It was tested and worked on Linux only
  • Slow for sending a huge amount of messages at once (in my computer it takes around 2 minutes for executing 10 thousand processes that are only printing a message)

How to use

This node allows you to use the command line of your system to execute template code inside Node-RED:

The sample above is using the command python3 that's installed on the system to execute $file (which is the code written inside the template space). Since it uses the command line of the system, you can execute code written on any programming language that you can execute on the command line. The following examples show how this node can be used:

  1. Executing Bash code:

  1. Executing Node.js code:

  1. Executing Python code:

  1. Queueing code:

  1. Using spawn:

  1. Output code as parsed JSON:


Syntax Highlight

This node is designed to work with the Ace editor. All syntax highlights available on Ace can be found on their GitHub page: https://github.com/ajaxorg/ace-builds/tree/master/src-min-noconflict

On Linux, it's possible to install the Vim mode and the syntax highlights available on this node with the following commands:

# vim mode
sudo wget -P /usr/local/lib/node_modules/node-red/node_modules/@node-red/editor-client/public/vendor/ace https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src-min-noconflict/keybinding-vim.js

# syntax highlight
sudo wget -P /usr/local/lib/node_modules/node-red/node_modules/@node-red/editor-client/public/vendor/ace https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src-min-noconflict/mode-sh.js
sudo wget -P /usr/local/lib/node_modules/node-red/node_modules/@node-red/editor-client/public/vendor/ace https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src-min-noconflict/mode-pgsql.js
sudo wget -P /usr/local/lib/node_modules/node-red/node_modules/@node-red/editor-client/public/vendor/ace https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src-min-noconflict/mode-r.js
sudo wget -P /usr/local/lib/node_modules/node-red/node_modules/@node-red/editor-client/public/vendor/ace https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src-min-noconflict/mode-nginx.js
sudo wget -P /usr/local/lib/node_modules/node-red/node_modules/@node-red/editor-client/public/vendor/ace https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src-min-noconflict/mode-apache_conf.js
sudo wget -P /usr/local/lib/node_modules/node-red/node_modules/@node-red/editor-client/public/vendor/ace https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src-min-noconflict/mode-dockerfile.js
sudo wget -P /usr/local/lib/node_modules/node-red/node_modules/@node-red/editor-client/public/vendor/ace https://raw.githubusercontent.com/ajaxorg/ace-builds/master/src-min-noconflict/mode-terraform.js

JSON flow with samples using this node:

[{"id":"1fe0aad8f59279e6","type":"exec queue","z":"ff922ddb.76cc18","name":"node.js code","currentLine":{"row":0,"column":24},"command":"node $file","debugMode":false,"outputs":1,"useSpawn":"false","field":"payload","fieldType":"msg","format":"javascript","template":"console.log('Hello World')","output":"str","outputEmpty":false,"vimMode":true,"queue":"1","addpayCB":false,"splitLine":false,"cleanQueue":true,"x":290,"y":4200,"wires":[["067388d0f5f0bc63"]]},{"id":"c4bbe370378bc234","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":155,"y":4200,"wires":[["1fe0aad8f59279e6"]],"l":false},{"id":"067388d0f5f0bc63","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":555,"y":4200,"wires":[],"l":false},{"id":"6d5e78de3114b886","type":"exec queue","z":"ff922ddb.76cc18","name":"bash code","currentLine":{"row":0,"column":18},"command":"bash $file","debugMode":false,"outputs":1,"useSpawn":"false","field":"payload","fieldType":"msg","format":"sh","template":"echo \"Hello World\"\n","output":"str","outputEmpty":false,"vimMode":true,"queue":"1","addpayCB":false,"splitLine":false,"cleanQueue":true,"x":290,"y":4320,"wires":[["49702ca370d9f756"]]},{"id":"4ebf5b2aa93f2b67","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":155,"y":4320,"wires":[["6d5e78de3114b886"]],"l":false},{"id":"49702ca370d9f756","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":555,"y":4320,"wires":[],"l":false},{"id":"37a8a116aae3dce3","type":"exec queue","z":"ff922ddb.76cc18","name":"python code (template parameters)","currentLine":{"row":0,"column":22},"command":"python3 $file","debugMode":false,"outputs":1,"useSpawn":"false","field":"payload","fieldType":"msg","format":"python","template":"print('{{{payload}}}')","output":"str","outputEmpty":false,"vimMode":true,"queue":"1","addpayCB":false,"splitLine":false,"cleanQueue":true,"x":360,"y":4380,"wires":[["b35308b00d181b45"]]},{"id":"9c2c5923aff087f1","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":155,"y":4380,"wires":[["37a8a116aae3dce3"]],"l":false},{"id":"b35308b00d181b45","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":555,"y":4380,"wires":[],"l":false},{"id":"038111031078bda8","type":"exec queue","z":"ff922ddb.76cc18","name":"python code (parsed json output)","currentLine":{"row":0,"column":1},"command":"python3 $file","debugMode":false,"outputs":1,"useSpawn":"false","field":"payload","fieldType":"msg","format":"python","template":"print('''\n{\n   \"value\": \"Hello World\" \n}\n\n''')","output":"parsedJSON","outputEmpty":false,"vimMode":true,"queue":"1","addpayCB":false,"splitLine":false,"cleanQueue":true,"x":350,"y":4620,"wires":[["6bf711436e4c78b2"]]},{"id":"e61f3df446be8e0e","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":155,"y":4620,"wires":[["038111031078bda8"]],"l":false},{"id":"6bf711436e4c78b2","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":555,"y":4620,"wires":[],"l":false},{"id":"a9e08253657428c1","type":"exec queue","z":"ff922ddb.76cc18","name":"python code (exec sleep 3)","currentLine":{"row":6,"column":2},"command":"python3 $file ","debugMode":false,"outputs":1,"useSpawn":"false","field":"payload","fieldType":"msg","format":"python","template":"import time\n\ntime.sleep(3)\nprint(\"Hello World\")\ntime.sleep(3)\nprint(\"Hello World\")\ntime.sleep(3)\nprint(\"Hello World\")","output":"str","outputEmpty":false,"vimMode":true,"queue":"1","addpayCB":false,"splitLine":false,"cleanQueue":true,"x":340,"y":4500,"wires":[["6c5a597dd98e3c69"]]},{"id":"71ed70de01f00df6","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":155,"y":4500,"wires":[["a9e08253657428c1"]],"l":false},{"id":"6c5a597dd98e3c69","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":555,"y":4500,"wires":[],"l":false},{"id":"3c40817b162d1ba9","type":"exec queue","z":"ff922ddb.76cc18","name":"python code (spawn sleep 3)","currentLine":{"row":8,"column":0},"command":"python3 -u $file","debugMode":false,"outputs":1,"useSpawn":"true","field":"payload","fieldType":"msg","format":"python","template":"import time\n\ntime.sleep(3)\nprint(\"Hello World\")\ntime.sleep(3)\nprint(\"Hello World\")\ntime.sleep(3)\nprint(\"Hello World\")\n","output":"str","outputEmpty":false,"vimMode":true,"queue":"1","addpayCB":false,"splitLine":false,"cleanQueue":true,"x":340,"y":4560,"wires":[["15f2032281da3432"]]},{"id":"3316a7a3cc4bbdb6","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":155,"y":4560,"wires":[["3c40817b162d1ba9"]],"l":false},{"id":"15f2032281da3432","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":555,"y":4560,"wires":[],"l":false},{"id":"34e8cb4e37f2d8a9","type":"exec queue","z":"ff922ddb.76cc18","name":"python code (queue)","currentLine":{"row":3,"column":2},"command":"python3 $file","debugMode":false,"outputs":1,"useSpawn":"false","field":"payload","fieldType":"msg","format":"python","template":"import time\n\ntime.sleep(3)\nprint(\"Hello World\")","output":"str","outputEmpty":false,"vimMode":true,"queue":"3","addpayCB":false,"splitLine":false,"cleanQueue":true,"x":320,"y":4440,"wires":[["558c5a8f111dbef9"]]},{"id":"376c02853cd956fb","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":155,"y":4440,"wires":[["34e8cb4e37f2d8a9"]],"l":false},{"id":"558c5a8f111dbef9","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":555,"y":4440,"wires":[],"l":false},{"id":"623a2f138efe29ed","type":"exec queue","z":"ff922ddb.76cc18","name":"using node.js synchronous code without interfering with the flow","currentLine":{"row":0,"column":0},"command":"node $file","debugMode":false,"outputs":1,"useSpawn":"false","field":"payload","fieldType":"msg","format":"javascript","template":"sleepSync(5000)\nconsole.log('Sync Node.js Hello World')\n\n// function\nfunction sleepSync(ms) {\n  var start = new Date().getTime(), expire = start + ms;\n  while (new Date().getTime() < expire) { }\n  return;\n}","output":"str","outputEmpty":false,"vimMode":true,"queue":"1","addpayCB":false,"splitLine":false,"cleanQueue":true,"x":450,"y":4260,"wires":[["17e18b61b0e44bea"]]},{"id":"4de7adfb59574592","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":155,"y":4260,"wires":[["623a2f138efe29ed"]],"l":false},{"id":"17e18b61b0e44bea","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":725,"y":4260,"wires":[],"l":false},{"id":"d9f0145631e0c10c","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":845,"y":4260,"wires":[["7571802f132d43f8"]],"l":false},{"id":"7571802f132d43f8","type":"function","z":"ff922ddb.76cc18","name":"using synchronous code interfering with the flow","func":"sleepSync(5000)\nmsg.payload = 'Sync Node.js Hello World'\nreturn msg\n\n// function\nfunction sleepSync(ms) {\n  var start = new Date().getTime(), expire = start + ms;\n  while (new Date().getTime() < expire) { }\n  return;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1080,"y":4260,"wires":[["2325d1e2296efe00"]]},{"id":"2325d1e2296efe00","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1315,"y":4260,"wires":[],"l":false}]