在python 3中操作命令时忽略反斜杠

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

我试图通过在python中设置命令在软件中运行一些步骤,如下所示:

The commands

cmd="ximage <<EOF\nread image.img\ndetect\\snr=3"
os.system(cmd)

当我执行最后一个命令时,它忽略了反斜杠并给出了以下错误:

[XIMAGE> read image.img
Image size = 1000 x 1000 pixels
[XIMAGE> detect\snr=3
 invalid command name "detectsnr=3"

它在执行命令时忽略反斜杠,尽管它在命令行中显示反斜杠。有没有人见过这个问题?任何帮助将不胜感激。

python-3.x backslash
1个回答
3
投票

我的建议:通过使用subprocess和重定向输入,消除中间人并使代码更具可移植性

而且,在这里,真正的问题是你必须使用/而不是\作为你的命令(参考:ximage manual)。

detect/snr_threshold=x
Change the signal to noise acceptance threshold from its default value of 2.

无论您要将多少放在那里,反斜杠都会从解析中消除...

import subprocess
p = subprocess.Popen(["ximage"],stdin=subprocess.PIPE)
out,err = p.communicate(b"read image.img\ndetect/snr=3")
returncode = p.wait()

像这样你可以传递字符串,而不会冒被底层shell解释的风险(os.system被弃用的原因之一),并且它可以在Windows上移植。

subprocess.communicate将输入字符串作为参数(类型为bytes,因此b前缀)

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