转义 os.system() 调用中的命令参数
在 Python 中使用 os.system() 时,确保正确的参数处理是至关重要的。文件和其他参数通常需要转义以防止干扰 shell 的命令。以下是有效转义各种操作系统和 shell(尤其是 bash)参数的综合指南:
使用引号
最简单的解决方案是将参数括在引号中。单引号 (') 防止 shell 扩展,而双引号 (") 允许变量替换,但抑制带引号的字符串内的变量扩展。这种方法在不同平台和 shell 中得到广泛支持,包括 bash:
<code class="python">os.system("cat '%s' | grep something | sort > '%s'" % (in_filename, out_filename))</code>
使用 shlex 模块
Python 提供了专门为此目的而设计的 shlex 模块,它的 quote() 函数可以正确转义用于 POSIX shell 的字符串,包括 bash:
<code class="python">import shlex escaped_in_filename = shlex.quote(in_filename) escaped_out_filename = shlex.quote(out_filename) os.system("cat {} | grep something | sort > {}".format( escaped_in_filename, escaped_out_filename))</code>
使用 Pipes 模块(弃用警告!)
对于 Python 版本 2.x 和 3.x 直至 3.10,可以使用已弃用的 Pipes 模块中的 Pipes.quote 作为替代方案请注意,从 Python 3.11 开始,管道被标记为删除:
<code class="python">from pipes import quote escaped_in_filename = quote(in_filename) escaped_out_filename = quote(out_filename) os.system("cat {} | grep something | sort > {}".format( escaped_in_filename, escaped_out_filename))</code>
作为一般规则,出于安全原因,用户生成的输入不应直接插入到系统调用中适当的验证和消毒。
以上是如何在 Python 的 `os.system()` 调用中正确转义命令参数?的详细内容。更多信息请关注PHP中文网其他相关文章!