python - 为什么两个相同的字符串但以不同的方式连接在使用 python 调用的 shell 上下文中会产生不同的结果?

标签 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))

返回非零退出状态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/

相关文章:

用自定义字符串替换美元符号 ($) 变量的 Java EE 方法

linux - CentOS 7 pidof -x 不工作

python - 培训中的 AWS NoCredentials

python - 尝试运行 Anaconda Navigator 时出现段错误

c++ - 使用具有不同参数的 Boost Tokenizer escaped_list_separator

linux - 从另一个脚本调用一个 shell 脚本并将该脚本的输出存储在一个变量中

linux - Tiny Core linux : terminals database is inaccessible 上的 MariaDB

python - 有没有更好的方法来交换没有占位符的字符串

Python:安装多处理

java - 在 Java 中用定界符连接值列表的最优雅的方法是什么?