[파이썬] subprocess `Popen.returncode`: 반환 코드 사용

The subprocess module in Python provides a way to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. When working with subprocesses in Python, it is often necessary to check the return code of the completed process to determine its success or failure.

One of the attributes provided by the subprocess.Popen class is returncode. This attribute stores the return code of the executed command. A return code of 0 generally indicates successful execution, while any non-zero value represents some kind of failure or error.

In this blog post, we will explore how to use the Popen.returncode attribute to handle the return codes of subprocesses and take appropriate actions based on their values.

Executing a subprocess and retrieving the return code

To start a subprocess and retrieve its return code, we first need to import the subprocess module:

import subprocess

Next, we can use the subprocess.Popen class to execute a command. Let’s take the example of running a simple shell command, such as printing the current working directory:

process = subprocess.Popen(["pwd"])

After the command has finished executing, we can access the return code using the returncode attribute:

return_code = process.returncode
print(f"Return code: {return_code}")

Handling different return code scenarios

Checking for successful execution

To check if the command executed successfully (i.e., return code of 0), we can use an if statement:

if process.returncode == 0:
    print("Command executed successfully")
else:
    print("Command failed")

Taking action based on specific return codes

If you need to handle specific return codes differently, you can use multiple if statements to check for the desired return code:

if process.returncode == 0:
    print("Command executed successfully")
elif process.returncode == 1:
    print("Command failed: Invalid arguments")
elif process.returncode == 2:
    print("Command failed: File not found")
else:
    print("Command failed for an unknown reason")

By checking specific return codes, you can provide more meaningful and informative messages to the user.

Using the return code in program logic

In addition to printing messages, you can use the return code in your program’s logic. For example, you might want to exit the program if the return code indicates a failure:

if process.returncode != 0:
    print("Command failed, exiting program")
    exit(1)

Or you can proceed with further actions based on the return code:

if process.returncode == 0:
    print("Command executed successfully")
    # Perform additional actions here
else:
    print("Command failed")
    # Take alternative actions here

Conclusion

By utilizing the Popen.returncode attribute from the subprocess module, you can easily check the return codes of executed commands in Python. This allows you to handle success and failure scenarios appropriately and build robust subprocess-based applications.

Remember to always check the return code after executing a subprocess to ensure proper handling of errors and failures.