os.system 中的 Python 双引号



我在python中有一个命令:

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

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

你能帮我吗?

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}

如果要回显引号,则需要对其进行转义。

例如:

echo "value"

价值

echo ""value""

"价值">

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

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

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

最新更新