[파이썬] argparse 사용자 정의 액션 추가

Python’s argparse module is a powerful tool for parsing command-line arguments. It provides a convenient way to define and handle various types of arguments for your script. While argparse offers a wide range of built-in actions, sometimes you may need to create your own custom action to extend its functionality.

In this blog post, we will explore how to add a custom action to argparse in Python. We will create an example where we want to count the number of times a specific flag is provided in the command line arguments.

Creating the Custom Action

To create our custom action, we need to subclass the argparse.Action class and override the __call__ method. The __call__ method is called when the custom action is encountered during argument parsing.

import argparse

class CountAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        # Retrieve the current count from the namespace
        current_count = getattr(namespace, self.dest, 0)
        
        # Increment the count
        setattr(namespace, self.dest, current_count + 1)

In the code above, we define a CountAction class that extends argparse.Action. Inside the __call__ method, we retrieve the current count from the namespace using getattr, increment it, and then set the updated count using setattr.

Implementing the Custom Action

To use our custom action, we need to add it to the argument parser. Let’s update our argument parser to include a new flag -c or --count that uses our custom action. We will also add a simple positional argument filename.

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('filename', help='The name of the file')
    parser.add_argument('-c', '--count', action=CountAction, default=0, help='Count the number of times the flag is provided')
    
    args = parser.parse_args()
    
    print(f'Provided filename: {args.filename}')
    print(f'Count of the flag: {args.count}')

In the code above, we instantiate our argparse.ArgumentParser and add the required positional argument filename. We also define our custom action by setting the action parameter to CountAction. This ensures that each time the -c or --count flag is provided, the custom action is executed.

Testing the Custom Action

Let’s test our custom action with some example command-line inputs:

$ python script.py file.txt -c
Provided filename: file.txt
Count of the flag: 1

$ python script.py file.txt -c -c -c
Provided filename: file.txt
Count of the flag: 3

$ python script.py file.txt
Provided filename: file.txt
Count of the flag: 0

As you can see, our custom action correctly counts the number of times the -c or --count flag is provided. The count is then printed as part of the program’s output.

Conclusion

Custom actions in argparse allow us to extend the functionality of Python scripts by adding our own logic for handling command-line arguments. In this blog post, we explored how to create and use a custom action to count the number of times a specific flag is provided. By understanding how to create and implement custom actions, you can leverage the full power of argparse in your Python projects.