Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: Print only one time inside a loop

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.

like image 507
Tes3awy Avatar asked Jun 23 '16 20:06

Tes3awy


People also ask

How do I print only once in a loop?

A good way to achieve printing under certain conditions is to declare a Variable like e.g. "printed" and initialize it with 0. Once you printed what you wanted you set the variable to 1 and you can only print if the condition is "printed == 0". After the whole process is done you reset the variable to 0 again.

How do you stop multiple prints in Python?

In Python 3, print() is a function that prints output on different lines, every time you use the function. However, you can avoid this by introducing the argument end and assigning an empty string to it. This will prevent the next output from being printed in a new line.


2 Answers

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.

like image 187
Carl 'Subzidion' Hiltbrunner Avatar answered Oct 17 '22 00:10

Carl 'Subzidion' Hiltbrunner


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
like image 31
matt.condit Avatar answered Oct 16 '22 23:10

matt.condit