Python 用反斜杠转义还是在shell中引用?

Python 用反斜杠转义还是在shell中引用?,python,shell,Python,Shell,当使用os.system(program file_argument))通过命令行启动程序时,如果参数是文件(其中可能有空格),那么将参数发送到其他程序的最佳方式是什么 我已经看过这些选项: 使用pipes.quote(文件名)(对于Python 3,使用shlex.quote(文件名))生成如下字符串:'/dir/file with white space' 使用re.escape(文件名)生成如下字符串:/dir/file\with\white\space 使用它们之间是否存在可能影响调

当使用
os.system(program file_argument))
通过命令行启动程序时,如果参数是文件(其中可能有空格),那么将参数发送到其他程序的最佳方式是什么

我已经看过这些选项:

  • 使用
    pipes.quote(文件名)
    (对于Python 3,使用
    shlex.quote(文件名)
    )生成如下字符串:
    '/dir/file with white space'
  • 使用
    re.escape(文件名)
    生成如下字符串:
    /dir/file\with\white\space
使用它们之间是否存在可能影响调用程序的差异?(还有其他选择吗?)还有什么需要考虑的吗?
>>> import subprocess
>>> subprocess.call(['cat', 'file with space.txt'])
使用
os.system
,虽然入门简单,但在尝试执行更复杂的任务时会出现故障

我希望我能更早地放弃
os.system
,只熟悉
子流程。这是值得的

使用
os.system
,虽然入门简单,但在尝试执行更复杂的任务时会出现故障


我希望我能更早地放弃
os.system
,只熟悉
子流程。很值得花时间。

最好的方法是通过
子流程调用
。您可以传递参数列表,引用将自动完成。
re.escape
用于正则表达式转义。它所做的与你所需要的完全不同。@Jean-Françoisfare,这是误导。对于
subprocess.call([…])
不需要引用,因为不涉及shell;使用
subprocess.call(“…”,shell=True)
您需要引用,就像使用
os.system()
一样。通常,您应该始终选择前者(即,如果您不特别需要shell,请避免使用它)。最好的方法是通过
子流程调用
。您可以传递参数列表,引用将自动完成。
re.escape
用于正则表达式转义。它所做的与你所需要的完全不同。@Jean-Françoisfare,这是误导。对于
subprocess.call([…])
不需要引用,因为不涉及shell;使用
subprocess.call(“…”,shell=True)
您需要引用,就像使用
os.system()
一样。一般来说,您应该始终选择前者(即,如果您不特别需要外壳,请避免使用外壳)。