我想从我的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"\''
我不确定如何坦率地解释,我也不懂如何修复我的单字符串。
答案 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"'"""