os.system中的Python双引号

时间:2018-09-03 12:03:33

标签: python

我在python中有一条命令:

os.system('echo {{"value": {0:0.0f}}} | /usr/bin/cmd -parameters'.format(value))

问题是我收到的是价值而不是“价值”。我想在外壳中具有“价值”。我尝试使用三重双引号,斜杠和json.dumps。没有任何帮助,仍然是价值而不是“价值”。

你能帮我吗?

2 个答案:

答案 0 :(得分:2)

os.system已过时。改为使用subprocess,它将为您很好地处理报价。

由于拥有管道,通常必须创建2个subprocess对象,但是在这里,您只想提供标准输入,即可:

import subprocess
p = subprocess.Popen(["/usr/bin/cmd","-parameters"],stdin=subprocess.PIPE)
p.communicate('{{"value": {:0.0f}}}\n'.format(value).encode())  # we need to provide bytes
rc = p.wait()

引用问题消失了,因为您没有使用系统命令来提供参数,而是使用纯python。

为了对此进行测试,我将命令更改为more,以便可以在Windows上运行它(这也证明它是可移植的):

import subprocess
value=12.0
p = subprocess.Popen(["more.com"],stdin=subprocess.PIPE)
p.communicate('{{"value": {:0.0f}}}\n'.format(value).encode())
rc = p.wait()
显示以下内容的

{"value": 12}

答案 1 :(得分:1)

如果要回显引号,则需要将其转义。

例如:

echo "value"
  

echo "\"value\""
  

“值”

所以您的python代码应该看起来像

os.system('echo {{\\"value\\": {0:0.0f}}} | /usr/bin/cmd -parameters'.format(value))

请注意,您应该使用双斜杠\\,因为python会转义单个斜杠。