Python使用os.system时如何通过命令行参数动态传入数据集名称
你可以通过读取sys.argv获取命令行传入的参数,实现自定义数据集名称的需求,修改后的代码如下:
import os import sys # 参数校验:未传入数据集名时打印使用提示并退出 if len(sys.argv) < 2: print("使用方式:python3 prog_name.py 数据集名称") sys.exit(1) # 读取命令行传入的数据集名 dataset_name = sys.argv[1] # 将C4.5程序路径提取为公共变量,后续修改路径更便捷 c45_exec_path = "/home/mine/Desktop/C4.5/" # 拼接执行命令 os.system(f"{c45_exec_path}c4.5 -u -f {dataset_name}") os.system(f"{c45_exec_path}c4.5rules -u -f {dataset_name} > Temp") f = open('Temp')
改动说明
- 执行
python3 prog_name.py my_data_set_name时,sys.argv列表会存储所有命令行参数,其中sys.argv[0]为脚本本身名称,sys.argv[1]即为传入的自定义数据集名 - 新增参数校验逻辑,避免未传参数时程序无意义报错
- 公共路径抽离为变量,降低后续维护成本
- 使用f-string实现字符串动态拼接,自动替换命令中的数据集名
如果你的Python版本低于3.6,不支持f-string语法,可以将命令拼接部分替换为format写法:
os.system("{}c4.5 -u -f {}".format(c45_exec_path, dataset_name)) os.system("{}c4.5rules -u -f {} > Temp".format(c45_exec_path, dataset_name))
如果你的数据集名称或路径包含空格,可以给拼接的参数部分加双引号转义,避免命令执行出错:
os.system(f"{c45_exec_path}c4.5 -u -f \"{dataset_name}\"") os.system(f"{c45_exec_path}c4.5rules -u -f \"{dataset_name}\" > Temp")
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

