如何从命令行调用Python文件中未在main代码块的独立函数?
解决Python脚本从命令行指定调用函数的问题
这问题我之前调试脚本时也踩过坑!你现在的脚本完全没处理命令行传入的参数,所以不管你在命令行加say还是其他参数,它都会按原来的逻辑执行——先跑sum(10,9),再调用final()。要实现从命令行指定调用函数,咱们得改改脚本逻辑:
核心思路
- 导入
sys模块,用来获取命令行传入的参数 - 在
if __name__ == "__main__"代码块里,读取传入的函数名参数 - 根据参数匹配对应的函数并执行,同时处理参数错误的情况
修改后的完整代码
import sys def sum(a, b): print(a + b) def say(): print("Yes!!!") def final(): print("Hello") # 原来的sum(10,9)如果不需要默认执行,可以注释掉或者移到条件块里 # sum(10, 9) if __name__ == "__main__": # 检查是否传入了函数名参数 if len(sys.argv) < 2: print("请指定要调用的函数名:say/final/sum") sys.exit(1) func_name = sys.argv[1] # 从全局命名空间获取函数对象 try: func = globals()[func_name] # 针对不同函数处理参数需求 if func_name == "sum": if len(sys.argv) != 4: print("sum函数需要两个数字参数:python test.py sum 10 9") sys.exit(1) a = int(sys.argv[2]) b = int(sys.argv[3]) func(a, b) else: # say和final不需要参数,直接调用 func() except KeyError: print(f"不存在名为{func_name}的函数,请检查输入") sys.exit(1)
测试效果
- 调用say函数:
python test.py say,输出Yes!!! - 调用final函数:
python test.py final,输出Hello - 调用sum函数:
python test.py sum 10 9,输出19 - 没传参数或传错函数名:会给出友好提示
补充说明
如果你不想移除原来默认执行的sum(10,9),可以把它放到无参数传入的分支里,这样脚本既保留原有功能,又支持指定函数调用。
内容的提问来源于stack exchange,提问作者Souvik Ray
相关产品推荐
相关产品推荐

