Totally agree, we should make the External Tool node more usable.
Still, to give you a possible workaround right now, I just rebuilt the NGS Bash node’s functionality using the Python Script node in KNIME 4.7, and using the bundled Python environment (which it’ll use by default if you freshly install the Python Integration in KNIME). So you don’t even need to deal with setting up a Python installation.
Place a Python Script node in your workflow, click the three dots to remove the input table and add a second output table and then paste the code below.
You only have to adjust the two lines after the comment to make the node do what you did with the NGS Bash node:
import knime.scripting.io as knio
import subprocess as sp
import pandas as pd
# equivalent to the input fields of the NGS bash node:
cmd = 'ls -lah'
working_dir = '/Users/chaubold'
proc = sp.run(cmd.split(" "), cwd=working_dir, capture_output=True)
def get_lines_not_empty(stream):
lines = stream.decode().splitlines()
if len(lines) == 0:
return [""] # because KNIME doesn't like a completely empty data frame
else:
return lines
df_stdout = pd.DataFrame({"StdOut": get_lines_not_empty(proc.stdout)})
df_stderr = pd.DataFrame({"StdErr": get_lines_not_empty(proc.stderr)})
knio.output_tables[0] = knio.Table.from_pandas(df_stdout)
knio.output_tables[1] = knio.Table.from_pandas(df_stderr)
Hope that helps
Carsten
EDIT: this solution will also have problems with quotation marks in program arguments but that can be fixed rather easily.