我正在使用 python 的 subprocess.call() 执行 bash 命令。我将用户输入作为我的命令的参数,如下所示。
my_command = 'command -option1 {0} -option2 {1}'.format(arg1, arg2)
这里 arg1 和 arg2 是用户输入,但问题是用户输入可以有引号和空格,所以我想用这样的双引号将参数括起来。
my_command = 'command -option1 "{0}" -option2 "{1}"'.format(arg1, arg2)
由于我无法控制用户输入,因此输入可以包含双引号或单引号。因此,我用以下转义序列替换输入。
arg1 = arg1.replace('"', '\"').replace("'", "\'")
arg2 = arg2.replace('"', '\"').replace("'", "\'")
my_command = 'command -option1 "{0}" -option2 "{1}"'.format(arg1, arg2)
对我来说一切都很好,但是当我执行命令时,我得到了以下错误。
subprocess.call(shlex.split(my_command))
拆分返回列表 (lex) 中的文件“/usr/lib/python2.6/shlex.py”,第 279 行
文件“/usr/lib/python2.6/shlex.py”,第 269 行,在下一个令牌 = self.get_token()
文件“/usr/lib/python2.6/shlex.py”,第 96 行,在 get_token raw = self.read_token() 文件“/usr/lib/python2.6/shlex.py”,第 172 行,在 read_token
raise ValueError, "没有收盘价"
ValueError:没有收盘价
我该如何处理?
编辑:我想在 bash 命令中保留这些引号和空格。