Обратная косая черта игнорируется при работе с командой в Python 3 - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь выполнить некоторые шаги в программном обеспечении, настроив команды в 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 голосов
/ 10 сентября 2018

Мой совет: устраните посредника и сделайте ваш код более переносимым, используя 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()

Таким образом, вы можете передать строку, не рискуя интерпретировать ее базовой оболочкой (одна из причин, по которой os.system не рекомендуется), и она переносима, например, в Windows.

subprocess.communicate принимает входную строку в качестве аргумента (типа bytes, следовательно, префикс b)

...