传递参数,其中包括双引号子过程使用Python

问题描述 投票:4回答:1

我正在寻找一种方式来传递包含双引号Python的子模块的参数,不需要转义双引号。

我已经看到了这个问题问了几个不同的时间时,引号周围的阿根廷,但答案通常是去掉引号。我打的问题是,引号是参数的一部分,必须传递给脚本没有前面加上一个反斜杠每个报价

例:

我打电话subprocesTest.bat,一个简单的批处理脚本,需要一个参数和回声它:

echo "%~1"

我调用批处理脚本巨蟒与包括引号的ARG:

import subprocess
test_string = 'Bill said "Hi!"'
cmd = ["subprocesTest.bat",
       test_string
       ]

p = subprocess.Popen(cmd)
p.wait()

预期输出:

“比尔说:‘嗨!’”

实际的输出:

“比尔说\”嗨!\“”

调用命令行相同的批处理脚本时按以下方法我可以得到预期的输出:

subprocesTest.bat“比尔说:‘嗨!’”

望着源,subprocess.py的list2cmdline功能是记录有:

 3) A double quotation mark preceded by a backslash is
   interpreted as a literal double quotation mark.

不过,如果我通过这个功能一步,我看透传递双引号没有前面加上一个反斜杠没有办法:

        elif c == '"':
            # Double backslashes.
            result.append('\\' * len(bs_buf)*2)
            bs_buf = []
            result.append('\\"')

所以,我有两个问题...

  • 是否有可能通过对Arg的子其包含双引号没有前面加上一个反斜杠
  • 如果它是不可能的,能有人跟我为什么功能设计这样解释?项目三在funcion的doc string似乎表明,我可以在前面加上一个反斜杠通过文字报价,但是这并不能产生我一直在寻找的行为。我在阅读文档错了吗?

这里是哪里这个问题是问,并没有使用引号工作的其他线程:

我看到的情况没有任何反应,我其实想通过报价在我的论据

python subprocess quotes double-quotes quoting
1个回答
0
投票

1)是的,但也许不是在Windows和/或.bat文件。例如,当你运行Windows相当于该发生的事情:

import subprocess

test_string = 'Bill said "Hi!"'

cmd = ["./myprog.py",
       test_string
       ]

p = subprocess.Popen(cmd)
p.wait()

魔音pro国.朋友:

#!/usr/bin/env python

import sys

print '"{}"'.format(sys.argv[1])

2)好了,下面似乎有点含糊:

"Bill said "Hi!""

是带引号的字符串:

"Bill said " 

其次是加引号的字符串:

Hi!

其次是带引号的空字符串:

""

?

© www.soinside.com 2019 - 2024. All rights reserved.