如何将变量存储的值作为参数传递给带argparse的Python脚本
你当前写法的问题在于,使用!前缀执行shell命令(该语法常见于Jupyter、IPython环境)时,命令内的val不会被识别为Python上下文的变量,只会作为普通字符串传递给脚本,因此最终输出的是字符串val。
解决方案
方法1:IPython内置变量替换(最便捷)
IPython内核原生支持在!执行的命令中,用{}包裹Python变量完成值注入,直接修改调用代码即可:
val = 1 !python mytest.py --value {val}
部分版本也支持用$前缀引用变量,写法为!python mytest.py --value $val。
方法2:subprocess模块调用(通用安全)
如果是在普通Python脚本中调用外部脚本,或者需要更高的可控性,推荐使用标准库subprocess实现参数传递,还能避免shell注入风险:
import subprocess val = 1 # 列表形式传递参数,自动处理类型转义和特殊字符 subprocess.run(["python", "mytest.py", "--value", str(val)], check=True)
两种方法都可以将val变量存储的数值1正确传递给mytest.py脚本,运行后会输出预期的1。
可选优化:如果确定--value参数接收的是整数,可以修改mytest.py的参数定义,直接将参数解析为整型,避免后续手动转类型:
parser.add_argument("--value", type=int)
内容的提问来源于stack exchange,提问作者Talha Anwar
相关产品推荐
相关产品推荐

