2016-10-03 110 views
0

当使用os.system(program file_argument))通过命令行启动程序并且参数是一个文件(可能有空白)时,将参数发送到其他程序的最佳方式是什么?用反斜杠或在shell中引用进行转义?

我已经看了这些选项:

  • 使用pipes.quote(file_name)(或shlex.quote(file_name)为Python 3)产生一个像这样的字符串:'/dir/file with white space'
  • 使用re.escape(file_name)产生的字符串是这样的:/dir/file\ with\ white\ space

使用这些可能影响被调用的程序的差异是否存在差异? (还有其他选择吗?)还有什么我需要考虑的?

+3

最好的办法是通过'subprocess.call'。您可以传递参数列表,并且引用将自动完成。 –

+1

're.escape'是用于正则表达式转义的。它与你所需要的完全不同。 – user2357112

+0

@ Jean-FrançoisFabre这是误导。使用'subprocess.call([...])''不需要引用*因为不涉及shell; 'subprocess.call'('...',shell = True)''''''''''''''''''''''''''''''''''''你需要像'os.system()一般来说,你应该总是喜欢前者(即如果你没有特别需要,就避免使用shell)。 – tripleee

回答

2
>>> import subprocess 
>>> subprocess.call(['cat', 'file with space.txt']) 

使用os.system,虽然简单上手,试图做更复杂的任务时发生故障。

我希望我早早就放弃了os.system,并且刚刚熟悉了subprocess。非常值得的时间。