-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
bugSomething isn't workingSomething isn't workinggood first issueGood for newcomersGood for newcomershelp wantedExtra attention is neededExtra attention is needed
Description
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
updateusingsubprocess.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 thecapture_output=Trueargument. - Tried: We removed
capture_output=Truefrom thesubprocess.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
ifblock 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
&withinsubprocess.run(). However, this caused an error because&was treated as a literal argument to theaptcommand. - 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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workinggood first issueGood for newcomersGood for newcomershelp wantedExtra attention is neededExtra attention is needed