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

时间:2018-09-10 18:35:23

标签: python-3.x backslash

我正在尝试通过在python中设置以下命令来在软件中运行某些步骤:

命令

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"

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

1 个答案:

答案 0 :(得分: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前缀)