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

3 投票
2 回答
2611 浏览
提问于 2025-04-16 03:17

这其实是一个关于编码风格的问题。我有一个脚本,它会处理某个特定的文件(或者一组文件)。如果能让用户通过命令行参数来提供这些文件,那就太好了。不过,用户可能会忘记提供这些文件,或者文件名不正确,所以我得在这里加上一个try/except来处理这些情况。

问题是,将来可能会有人想要导入我的模块。但是,我不知道那个程序可能需要什么命令行参数。而且,如果在我的模块访问命令行参数时出现错误,似乎应该由导入我模块的脚本来处理这个错误。不过,我的脚本仍然需要能够独立运行,即使出现错误也能应对。

有没有什么聪明的方法来解决这个问题,还是说最好的办法就是完全放弃命令行参数呢?

2 个回答

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)
5

通常的步骤是这样的:

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 函数里面。

撰写回答