Python脚本无法读取config.ini中path3携带的ens6f0参数求助
解决方法
问题根因
- 你在config.ini中给路径加了双引号,configparser读取时会将双引号作为值的一部分读取,导致系统无法识别被引号包裹的完整路径+参数串
- 你调用
subprocess.call时同时传入了列表参数和shell=True,这种情况下只有列表的第一个元素会被作为执行命令,参数不会被正确传递给目标脚本
修复步骤
1. 修正config.ini配置
去掉所有path值外层的双引号,修改后配置如下:
[my-config] path1 = /home/asad.javed/stop-services.sh path2 = /home/asad.javed/script.py path3 = /home/asad.javed/getbps.sh ens6f0
2. 修正subprocess调用逻辑
两种可选方案,推荐第二种更安全:
方案A:调整调用参数适配shell模式
保留shell=True的情况下,直接传命令字符串而非列表,shell会自动拆分命令和参数:
elif args.start: subprocess.call(path1, shell=True) subprocess.call(path2, shell=True) subprocess.call(path3, shell=True)
方案B:使用shlex拆分命令(推荐,无需开启shell=True)
先导入shlex模块,用shlex.split自动拆分命令和参数,避免shell注入风险:
# 顶部导入模块 import shlex # 调用部分修改为 elif args.start: subprocess.call(shlex.split(path1)) subprocess.call(shlex.split(path2)) subprocess.call(shlex.split(path3))
其他代码问题提示
当前代码的停止逻辑存在错误:get_sipresponse函数中sys.path.append返回值为None,赋值给p后无法调用terminate方法,且p是函数局部变量,main函数中无法直接访问。如果需要实现停止服务的能力,需要将subprocess.call替换为subprocess.Popen,将启动的进程对象存储为全局变量或者可访问的变量,才能在停止逻辑中调用terminate方法终止进程。
内容的提问来源于stack exchange,提问作者Asad Javed
相关产品推荐
相关产品推荐

