我正在使用subprocess.call,你只需要给它一个参数数组,它将构建命令行并执行它。
首先是否涉及任何逃避? (例如,如果我将参数作为参数传递给其中包含空格的文件,/path/my file.txt
会对其进行转义吗?"/path/my file.txt"
)
有没有办法让这个命令行在执行之前生成(在转义之后)?
因为我需要检查生成的命令行是否不超过一定数量的字符(以确保它在执行时不会出错)。
答案 0 :(得分:2)
如果您没有使用shell=True
,则实际上并未涉及“命令行”。 subprocess.Popen
只是将您的参数列表传递给基础execve()
系统调用。
同样地,没有转义,因为没有涉及shell,因此没有什么可以解释特殊字符,也没有任何东西可以尝试对你的字符串进行标记。
没有字符限制需要担心,因为参数永远不会连接到单个命令行中。最大参数数量和/或单个参数的长度可能存在限制。
如果 使用shell=True
,则必须先自行构建命令行,然后再将其传递给subprocess
。