如何以编程方式转义引号和斜杠

时间:2015-08-18 13:26:15

标签: python escaping

我需要一个python脚本来在windows上调用bash脚本。 所以基本上我必须通过python创建一个子进程调用,它将使用-c选项调用cygwin,该选项将调用我需要的脚本, 问题是这个脚本需要一些参数,并且这些参数是完整的os空格和引号和斜杠。 我使用的代码如下

//instead of 
sc.useDelimiter(Pattern.compile("(, ) | (\r\n)"));
//it should be this
sc.useDelimiter(Pattern.compile("(, )|(\r\n)"));

或者我直接转义,这有时会让我连续多达8个反斜杠,因为必须转发到我的脚本的反斜杠i)在bash ii)cmd.exe中iii)in蟒

所有这些都容易出错,每次都需要花费很长时间才能做到正确。

有更好的方法吗?理想情况下,我不会有任何转义反斜杠,但任何避免上述三斜杠双引号的东西都会很好。

我尝试使用re.escape,但可以弄清楚如何使用它,除了作为替换.replace(" \"," /")和类似。

1 个答案:

答案 0 :(得分:2)

不要将单个字符串传递给call;相反,传递一个由命令名称和每个元素一个参数组成的列表。这使您无需保护shell解释中的特殊字符。

subprocess.call(["retirarVirgula.sh", arq_saida], executable=r"C:\cygwin64\bin\bash")

注意:我假设arq_saida包含传递给脚本的单个参数;如果脚本有多个参数,那么arc_saida也可能被构建为一个列表:

arq_saida = ["arg", "arg two", "arg three"]
subprocess.call(["retirarVirgula.sh"] + arq_saida, executable=r"C:\cygwin64\bin\bash")