Найти - Пользователи
Полная версия: Почему не работает условие?
Начало » Python для новичков » Почему не работает условие?
1
gedat
Есть простой скрипт
 while True:
    out2 = subprocess.check_output('/root/script1', universal_newlines=True)
    print(out2)
    if out2 != "No":
        print("123")
    time.sleep(60)
/root/script1 выводит ответ No Проверено даже через print(out2). Но почему-то не работает условие
 if out2 != "No":
Срабатывает
 print("123")
FishHook
потому что результат check_output это не строка, а тип bytes

    
import subprocess
res = subprocess.check_output("echo No", shell=True)
print(res, type(res))
print(res == "No\n")
res = res.decode().strip()
print(res == "No", type(res))
gedat
FishHook
потому что результат check_output это не строка, а тип bytes
Однако это строка
  <class 'str'>
123
NO



 import subprocess
 while True:
     out2 = subprocess.check_output('/home/angel/script6', universal_newlines=True)
     print(out2, type(out2))
     if out2 != "NO":
         print("123")

script6
 #!/bin/bash
echo "NO"

FishHook
gedat
Сделайте строке стрип, там невидимые символы могут быть
gedat
FishHook
gedatСделайте строке стрип, там невидимые символы могут быть
Traceback (most recent call last):
File “/home/angel/pythontest.py”, line 7, in <module>
out2 = out2.decode().strip()
AttributeError: ‘str’ object has no attribute ‘decode’. Did you mean: ‘encode’?

gedat
Покапался и понял что
universal_newlines=True добавляет новую пустую строчу
А без universal_newlines b'NO\n' и с universal_newlines=None тоже самое
Теперь осталось понять что написать что бы было всё ок
FishHook
gedat
FishHook
Сделайте строке стрип
а вы делаете что?
gedat
out2.decode().strip()
декод то нафига, если это и так строка
gedat
FishHook
gedat
Извините, это моя невнимательность.
Спасибо)))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB