导入的Python模块中的命令行参数

时间:2010-08-25 19:29:25

标签: python command-line

这更像是编码风格的问题,但我有一个处理特定文件(或文件集)的脚本。允许用户将这些文件作为命令行参数提供是很好的。当然,用户可能忘记提供这些或文件名无效,所以我必须在这里介绍一下try / except。

问题是,有人可能希望将来导入我的模块。但是,我不知道程序可能需要的命令行参数。此外,如果我的模块访问命令行参数时抛出错误,似乎导入我的模块的脚本会更好地处理它。但是,如果抛出错误,我的脚本仍然需要能够独立应对。

是否有解决此问题的智能方法,或者只是放弃命令行参数的最佳解决方案?

2 个答案:

答案 0 :(得分:4)

通常的程序:

import sys

def main(*files):
    # your program's logic goes here

if __name__ == "__main__": #i.e. run directly
    try:
        main(*sys.argv[1:])
    except IOError:
        handle_error()

如果导入,__name__将是!= "__main__",因此实际上没有任何内容发生,导入者可以调用main(file1, file2)。但如果这个脚本是主脚本(即未导入),它只会在main中执行它现在所做的工作。

答案 1 :(得分:2)

检查您的文件是否正在运行或是否已导入:

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)