Уведомления

Группа в Telegram: @pythonsu

#1 Июль 1, 2022 17:12:30

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не работает условие?

Есть простой скрипт

 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")



Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Отредактировано gedat (Июль 1, 2022 17:29:26)

Офлайн

#2 Июль 1, 2022 17:40:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Почему не работает условие?

потому что результат 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))



Офлайн

#3 Июль 1, 2022 17:56:57

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не работает условие?

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"



Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Отредактировано gedat (Июль 1, 2022 18:05:25)

Офлайн

#4 Июль 1, 2022 18:04:53

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Почему не работает условие?

gedat
Сделайте строке стрип, там невидимые символы могут быть



Офлайн

#5 Июль 1, 2022 18:09:37

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не работает условие?

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’?



Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Отредактировано gedat (Июль 1, 2022 18:12:47)

Офлайн

#6 Июль 1, 2022 18:16:23

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не работает условие?

Покапался и понял что
universal_newlines=True добавляет новую пустую строчу
А без universal_newlines b'NO\n' и с universal_newlines=None тоже самое
Теперь осталось понять что написать что бы было всё ок



Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Отредактировано gedat (Июль 1, 2022 18:21:28)

Офлайн

#7 Июль 1, 2022 18:36:17

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Почему не работает условие?

gedat

FishHook
Сделайте строке стрип
а вы делаете что?
gedat
out2.decode().strip()
декод то нафига, если это и так строка



Отредактировано FishHook (Июль 1, 2022 18:36:40)

Офлайн

#8 Июль 1, 2022 20:16:50

gedat
Зарегистрирован: 2022-07-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Почему не работает условие?

FishHook
gedat
Извините, это моя невнимательность.
Спасибо)))



Не изучал язык python, просто пишу для работы мини скрипты
Мой основной язык C#

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version