Python subprocess:将字符串变量用作命令

0 投票
2 回答
1188 浏览
提问于 2025-04-18 08:35

我想根据输入来组装一些命令给Python脚本,但我在用subprocess.check_output的时候遇到问题,它没有识别到我的字符串。这里有个例子。

 str1 = "./program.sh %lf %lf" % (x0, x1)
 sim_flux230 = subprocess.check_output(str1)

它一直提示说找不到文件或目录,提到的是str1。请问我该怎么做才能让subprocess识别字符串str所包含的内容,而不是直接去查找一个叫str1的文件呢?

2 个回答

1

当你使用 subprocess 并且设置 shell=False 时,你需要把参数作为一个列表传递。如果你把 shell=True,那么就可以用字符串来传递参数。只要这样做,你的代码就应该能正常工作:

cmd = ["./program.sh", x0, x1]
sim_flux230 = subprocess.check_output(cmd)
2

试试使用 shlex,看看是否能帮到你:

import shlex

str1 = "./program.sh %lf %lf" % (x0, x1)
sim_flux230 = subprocess.check_output(shlex.split(str1))

一般来说,如果你没有使用 shell=True(也就是说,像 subprocess.check_output(str1, shell=True) 这样),那么命令需要以列表的形式传入。而且,使用 shell=True 是不安全的

撰写回答