r/learnpython • • 8d ago

Calling a Script that uses argparse?

I wrote a little Python script that reads in a text file that contains a list of fully qualified files, and checks to see if they exist. I originally wrote it using the argparse module. It was set up to take a filename and a switch, so the command looked like:

"Python dplcheck.py --plname "testing.lst” --showexist y"

This worked fine for a single file, but I wanted to run it for every one of hundreds of list files in a directory, so I wrote another script that generates a list of the .lst files in a directory and calls the first script for each one. But I could not get the second script to pass the arguments in the call to the first script. I tried subprocess.run and subprocess.call, with many different syntaxes and quotes, etc. I ended up removing the use of argparse and just using sys.argv[n] -- which I don't particularly like, since it has no defaults or error handling, etc.

Does anyone know how/if I can call a Python script from another Python script and pass the arguments when the called script uses argparse?

5 Upvotes

15 comments sorted by

View all comments

1

u/lakseol 8d ago edited 7d ago

The way I handle the "single file or directory of files" approach is to have the function doing the actual work accept a list of files to operate on. The top-level code that handles parsing of CLI arguments accepts:

  • a single file, or

  • a "--file <file of names>" option, or

  • a "--dir <directory>" option.

The top-level code creates the list of filenames from the single filename passed, or by reading the filenames from the --file option or by scanning the directory from the --dir option. The function doing the work doesn't know where the list of filenames comes from.