Naked.toolshed.shell.muterun_rb() function allows you to execute a Ruby script from your Python code and control the standard output and standard error streams on the Python side. These data are returned as attributes of a generic object without a write to the terminal and can be accessed (along with the exit status code) using standard Python dot syntax.
The returned object’s attributes include:
- stdout = standard output stream data (or empty string on non-zero exit status)
- stderr = standard error stream data (or empty string on zero exit status)
- exitcode = the exit status code
Here’s an example of how a script named
testscript.rb could be executed and handled on the Python side of your code:
from Naked.toolshed.shell import muterun_rb response = muterun_rb('testscript.rb') if response.exitcode == 0: # the command was successful, handle the standard output standard_out = response.stdout print(standard_out) else: # the command failed or the executable was not present, handle the standard error standard_err = response.stderr exit_code = response.exitcode print('Exit Status ' + exit_code + ': ' + standard_err)
The utility of this approach is that you can manipulate the output or suppress it altogether from the calling code. If you simply intend to print it to the terminal, then use the
execute_rb() function in the same module. This allows the Ruby script to maintain control of the data that are displayed in the terminal.