Python: Print only one time inside a loop

喜欢而已 提交于 2019-12-09 19:17:38

问题


I have a code where I want capture a video from a camera. I want to use Logging library of Python to get messages on the shell or export them to a text file.

Here is a part of my code where inside the while loop I want to print Camera Opened Successfully

import numpy as np
import cv2
import logging as log

cap = cv2.VideoCapture('5.mpg')

while True:

    ret, image = cap.read()

    if ret == True:
        log.warning('Camera Opened Successfully')

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    clahe = cv2.createCLAHE(clipLimit = 15.0, tileGridSize=(8,8))
    gray1 = clahe.apply(gray)

but what I get in the shell is this:

until I terminated the running script. Any idea on how to make it print only once.


回答1:


import numpy as np
import cv2
import logging as log

cap = cv2.VideoCapture('5.mpg')
hasOpened = False

while True:

    ret, image = cap.read()

    if ret and not hasOpened:
        log.warning('Camera Opened Successfully')
        hasOpened = True

If you want to break out of the loop after printing, follow Matt's answer. This option will continue in the loop and only print once.




回答2:


Add an extra boolean to track whether you have printed it out before:

import numpy as np
import cv2
import logging as log

cap = cv2.VideoCapture('5.mpg')
printed = False

while True:

    ret, image = cap.read()

    if ret == True and not printed:
        log.warning('Camera Opened Successfully')
        printed = True



回答3:


You must break out of the loop

import numpy as np
import cv2
import logging as log

cap = cv2.VideoCapture('5.mpg')

while True:

    ret, image = cap.read()

    if ret == True:
        log.warning('Camera Opened Successfully')
        break



回答4:


You need to break the while loop, also since you would like to break out of the loop as soon as you get ret True you can use:

ret = False
while not ret:

    ret, image = cap.read()

    if ret:
        log.warning('Camera Opened Successfully')
    # any other code



回答5:


Set a flag to trigger the log and then make it false. ret is to be made False when you are ready to exit the loop so that it will exit

import numpy as np
import cv2
import logging as log

cap = cv2.VideoCapture('5.mpg')
ret = True
logit = True
while ret:

    ret, image = cap.read()

    if logit == True:
        log.warning('Camera Opened Successfully')
        logit = False

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    clahe = cv2.createCLAHE(clipLimit = 15.0, tileGridSize=(8,8))
    gray1 = clahe.apply(gray)
    // process remainder of situation setting 



回答6:


Assuming you want to use your main loop to handle your application logic, and it doesn't make sense to have one loop for detecting if it is opened and another for working with it then I think what you want is to set a variable to determine if the state has changed.

import numpy as np
import cv2
import logging as log

cap = cv2.VideoCapture('5.mpg')
old_ret = False

while True:

    ret, image = cap.read()

    if old_ret == False and ret == True:
        old_red = True
        log.warning('Camera Opened Successfully')

    if ret == True:
        # Do other things that need the camera but no log


来源:https://stackoverflow.com/questions/38001105/python-print-only-one-time-inside-a-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!