为什么两个相同的字符串但串联不同在使用python调用的shell上下文中有不同的结果?

时间:2014-09-12 02:52:32

标签: python string shell

我想从我的python脚本启动一个cygwin命令,我的命令在变量params中。我有多种方法来编写字符串:

import os
import subprocess

params = r'"C:\cygwin64\bin\bash.exe" --login -c ' + r"""'ls "C:\Users"'"""

print(subprocess.check_output(params, shell=True))

这很好用,但是这个:

import os
import subprocess

params = r"""'C:\cygwin64\bin\bash.exe' --login -c 'ls "C:\Users"'"""

print(subprocess.check_output(params, shell=True))

返回non-zero exit status 1,而它应该是完全相同的字符串。为了检查差异,我运行了这个脚本:

print(repr(r"""'C:\cygwin64\bin\bash.exe' --login -c 'ls "C:\Users"'"""))
print(repr(r'"C:\cygwin64\bin\bash.exe" --login -c ' + r"""'ls "C:\Users"'"""))

返回:

'\'C:\\cygwin64\\bin\\bash.exe\' --login -c \'ls "C:\\Users"\''
'"C:\\cygwin64\\bin\\bash.exe" --login -c \'ls "C:\\Users"\''

我不确定如何坦率地解释,我也不懂如何修复我的单字符串。

1 个答案:

答案 0 :(得分:1)

第一个字符串用双引号包装bash.exe:

"C:\cygwin64\bin\bash.exe"

第二个用单引号括起来。

'C:\cygwin64\bin\bash.exe'

双引号是你想要的。或者没有引号,因为路径没有空格。

params = r""""C:\cygwin64\bin\bash.exe" --login -c 'ls "C:\Users"'"""
params = r"""C:\cygwin64\bin\bash.exe --login -c 'ls "C:\Users"'"""