我想从我的 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))
返回非零退出状态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"\''
坦率地说,我不确定如何解释这一点,我也不明白如何修复我的单一字符串。
最佳答案
第一个字符串将 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"'"""
关于python - 为什么两个相同的字符串但以不同的方式连接在使用 python 调用的 shell 上下文中会产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25800004/