导入Python模块中的命令行参数
这其实是一个关于编码风格的问题。我有一个脚本,它会处理某个特定的文件(或者一组文件)。如果能让用户通过命令行参数来提供这些文件,那就太好了。不过,用户可能会忘记提供这些文件,或者文件名不正确,所以我得在这里加上一个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
函数里面。