символы, экранированные в тестовой строке python, все еще существуют после печати

#python #python-2.7 #unit-testing #pytest

#python #python-2.7 #модульное тестирование #pytest

Вопрос:

у меня есть функция, которая делает что-то вроде

 def foo():
    return ["echo", "-e", "thisnisnmultiline"]
  

это записывается в файл .sh, который будет выполнен в какой-то момент, и я хотел бы выполнить unitest, чтобы проверить, что строка все еще имеет n в последнем аргументе, и что она не была записана как

 echo -e this
is
multiline
  

Я не знаю, как оценить строку, чтобы получить представление после печати.

я знаю, что мог бы записать это, прочитать и проверить, правильно ли это, но, похоже, unitesting действительно не нравится такой подход.

как бы это сделать? (предпочтительно с использованием python 2.7)

Комментарии:

1. os.popen(["/bin/echo", "-e", "thisnisnmultiline"]).read() ? позволит вам проверить вывод

2. команда не обязательно будет командой echo. Ну и что? но не совсем. это дает идею просто распечатать его и захватить поток. Но это тоже звучит не слишком правильно

3. Я уже сделал эту демонстрационную версию unittest с python 3.8, надеюсь, это поможет вам github.com/IT-Support-L2/Unit_TestDemo

Ответ №1:

используйте функцию string splitlines

 a = "1n2n3"
b = r"1n2n3"
c = "1\n2\n3"

len(a.splitlines()) # 3
len(b.splitlines()) # 1
len(c.splitlines()) # 1