Аргументы командной строки в импортированных модулях Python

Это скорее вопрос стиля кодирования, но у меня есть скрипт, обрабатывающий конкретный файл (или набор файлов). Было бы неплохо разрешить пользователю предоставлять эти файлы в качестве аргументов командной строки. Конечно, возможно, что пользователь забыл предоставить эти или имена файлов недействительными, поэтому мне нужно ввести try / except здесь.

Проблема в том, что кто-то может захотеть импортировать мой модуль в будущем. Но я не знаю, какие аргументы командной строки могут потребоваться для этой программы. Кроме того, если ошибка возникает, когда мой модуль обращается к аргументу командной строки, кажется, что лучше будет обрабатывать скрипт, который импортирует мой модуль. Тем не менее, мой сценарий по-прежнему должен иметь возможность справляться как автономный, если возникает ошибка.

Есть ли разумный способ решения этой проблемы или это лучшее решение просто отказаться от аргументов командной строки?

Обычная процедура:

import sys def main(*files): # your program's logic goes here if __name__ == "__main__": #ie run directly try: main(*sys.argv[1:]) except IOError: handle_error() 

Если импортировано, то __name__ будет! = "__main__" , поэтому ничего не происходит, и импортер может вызвать main(file1, file2) . Но если этот скрипт является основным скриптом (т. Е. Не импортированным), он просто будет делать то, что он делает сейчас, только в main .

Проверьте, запущен ли ваш файл или импортирован ли он таким образом:

 def myFunction(file): #do stuff to file if __name__ == '__main__': #I have not been imported! try: file = sys.argv[1] except: print "Usage: myFile.py file" sys.exit() myFunction(file)