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))
通过命令行启动程序时,如果参数是文件(其中可能有空格),那么将参数发送到其他程序的最佳方式是什么
我已经看过这些选项:
- 使用
(对于Python 3,使用pipes.quote(文件名)
)生成如下字符串: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()
一样。一般来说,您应该始终选择前者(即,如果您不特别需要外壳,请避免使用外壳)。