from i3pystatus import IntervalModule
from subprocess import check_output, CalledProcessError

class Shell(IntervalModule):
    """
    Shows output of shell command
    """

    color = "#FFFFFF"
    error_color = "#FF0000"

    settings = (
        ("command", "command to be executed"),
        ("color", "standard color"),
        ("error_color", "color to use when non zero exit code is returned")
    )

    required = ("command",)

    def run(self):
        try:
            out = check_output(self.command, shell=True)
            color = self.color
        except CalledProcessError as e:
            out = e.output
            color = self.error_color

        out = out.decode("UTF-8").replace("\n", " ")

        if out[-1] == " ":
            out = out[:-1]

        self.output = {
            "full_text": out,
            "color": color
        }

from i3pystatus import IntervalModule
from subprocess import check_output, CalledProcessError

class Shell(IntervalModule):
    """
    Shows output of shell command
    """

    color = "#FFFFFF"
    error_color = "#FF0000"

    settings = (
        ("command", "command to be executed"),
        ("color", "standard color"),
        ("error_color", "color to use when non zero exit code is returned")
    )

    required = ("command",)

    def run(self):
        try:
            out = check_output(self.command, shell=True)
            color = self.color
        except CalledProcessError as e:
            out = e.output
            color = self.error_color

        out = out.decode("UTF-8").replace("\n", " ")
        try:
            if out[-1] == " ":
                out = out[:-1]
        except:
            out = ""

        self.output = {
            "full_text": out,
            "color": color
        }

Add exception handling for output
Add exception handling for output

  from i3pystatus import IntervalModule
  from subprocess import check_output, CalledProcessError
  
  class Shell(IntervalModule):
      """
      Shows output of shell command
      """
  
      color = "#FFFFFF"
      error_color = "#FF0000"
  
      settings = (
          ("command", "command to be executed"),
          ("color", "standard color"),
          ("error_color", "color to use when non zero exit code is returned")
      )
  
      required = ("command",)
  
      def run(self):
          try:
              out = check_output(self.command, shell=True)
              color = self.color
          except CalledProcessError as e:
              out = e.output
              color = self.error_color
  
          out = out.decode("UTF-8").replace("\n", " ")
- 
+         try:
-         if out[-1] == " ":
+             if out[-1] == " ":
-             out = out[:-1]
+                 out = out[:-1]
+         except:
+             out = ""
  
          self.output = {
              "full_text": out,
              "color": color
          }
  
Add exception handling for output
## Code Before:
from i3pystatus import IntervalModule
from subprocess import check_output, CalledProcessError

class Shell(IntervalModule):
    """
    Shows output of shell command
    """

    color = "#FFFFFF"
    error_color = "#FF0000"

    settings = (
        ("command", "command to be executed"),
        ("color", "standard color"),
        ("error_color", "color to use when non zero exit code is returned")
    )

    required = ("command",)

    def run(self):
        try:
            out = check_output(self.command, shell=True)
            color = self.color
        except CalledProcessError as e:
            out = e.output
            color = self.error_color

        out = out.decode("UTF-8").replace("\n", " ")

        if out[-1] == " ":
            out = out[:-1]

        self.output = {
            "full_text": out,
            "color": color
        }

## Instruction:
Add exception handling for output
## Code After:
from i3pystatus import IntervalModule
from subprocess import check_output, CalledProcessError

class Shell(IntervalModule):
    """
    Shows output of shell command
    """

    color = "#FFFFFF"
    error_color = "#FF0000"

    settings = (
        ("command", "command to be executed"),
        ("color", "standard color"),
        ("error_color", "color to use when non zero exit code is returned")
    )

    required = ("command",)

    def run(self):
        try:
            out = check_output(self.command, shell=True)
            color = self.color
        except CalledProcessError as e:
            out = e.output
            color = self.error_color

        out = out.decode("UTF-8").replace("\n", " ")
        try:
            if out[-1] == " ":
                out = out[:-1]
        except:
            out = ""

        self.output = {
            "full_text": out,
            "color": color
        }
