Skip to content

Help Wanted in fixing these issues. Im new!! be nice. #1

@BasedBadass

Description

@BasedBadass
def perform_system_updates():
    """Prompts the user and performs system updates with optional output."""
    user = os.getlogin()
    answer = input(f"{user}: Would you like to perform System Updates? (yes/no) [yes]: ")
    if answer.lower() in ["", "y", "yes"]:
        show_output = input("Show update output? (yes/no) [no]: ")
        try:
            if show_output.lower() in ["y", "yes"]:
                # Run the update commands in the foreground (with output)
                process = subprocess.run(['sudo', 'apt', 'update'], capture_output=True, text=True, check=True)
                print(process.stdout)
                process = subprocess.run(['sudo', 'apt', 'full-upgrade', '-y'], capture_output=True, text=True, check=True)
                print(process.stdout)
            else:
                # Run the update commands in the background (no output)
                subprocess.Popen(['sudo', 'apt', 'update'])  # Use Popen for background
                subprocess.Popen(['sudo', 'apt', 'full-upgrade', '-y'])  # Use Popen for background
            return "System updates complete."
        except subprocess.CalledProcessError as e:
            return f"Error updating system: {e}"
    else:
        return "System updates skipped."

1. Alias Execution

  • Initially, we tried to execute a bash alias update using subprocess.run(). However, aliases are shell-specific and don't work directly within Python scripts unless explicitly invoked in a shell context.
  • Tried: subprocess.run(['bash', '-c', 'source ~/.bashrc && update'], ...) to execute the alias within a bash shell.

2. Background Execution

  • We wanted to run the updates silently in the background when the user chose not to see the output. Using subprocess.Popen() seemed like the solution, but it still captured the output due to the capture_output=True argument.
  • Tried: We removed capture_output=True from the subprocess.Popen() calls to prevent output capture in the background.

3. Conditional Output Control

  • We had issues with the output being displayed even when the user chose not to see it. This was due to incorrect placement of the if show_output.lower() in ["", "y", "yes"] condition.
  • Tried: We moved the condition to the correct if block to ensure that the output is captured and printed only when the user explicitly requests it.

4. Incorrect Background Execution with &

  • We attempted to run the commands in the background using & within subprocess.run(). However, this caused an error because & was treated as a literal argument to the apt command.
  • Tried: We reverted to using subprocess.Popen() for correct background execution.

5. Default Value Mismatch

  • The prompt for showing output indicated "no" as the default, but the code was checking for an empty string (""), leading to the output being displayed even when the user simply pressed Enter.
  • Tried: We removed the "" from the check to ensure that the output is shown only when the user explicitly types "y" or "yes".

After struggling with this I just left it in a working state. I was hoping somebody could shed some light on these issues I am having. Thanks.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workinggood first issueGood for newcomershelp wantedExtra attention is needed

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions