@JRBRO

Как сделать запись вывода из консоли в файл по нажатию?

Вопрос с одной стороны простой, но что-то не могу допереть.

Есть скрипт, который печатает координаты в консоль.

405 392 1095 836
1184 553 1372 796


Все это я осбираюсь вывести в output файл, но есть одно но, если я ошибусь, он мне запишет и потом надо вручную удалять.
sys.stdout = open('output.txt','wt')

Так вот, суть вопроса, можно ли сделать запись последней строчки вывода в файл по нажатию?

Допустим есть вывод:
1
1
1
1
2

И как только я добился 2, жму отправить, а 1 он скипает (это чисто пример, выше писал что это будут координаты)

Для лучшего понимания, вот скрипт

import cv2
import sys
import matplotlib.pyplot as plt
original = cv2.imread(sys.argv[1])
ix = -1
iy = -1
drawing = False

def draw_reactangle_with_drag(event, x, y, flags, param):
    global ix, iy, drawing, original
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix = x
        iy = y
    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing == True:
            img = original.copy()
            cv2.rectangle(img, pt1=(ix,iy), pt2=(x, y),color=(0,255,255),thickness=10)
            cv2.imshow("Title of Popup Window", img)
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        img = original.copy()
        cv2.rectangle(img, pt1=(ix,iy), pt2=(x, y),color=(0,255,255),thickness=10)
        print(ix, iy, x, y)
        cv2.imshow("Title of Popup Window", img)

cv2.namedWindow(winname= "Title of Popup Window")
cv2.setMouseCallback("Title of Popup Window", draw_reactangle_with_drag)
cv2.imshow("Title of Popup Window", original)
while True:
    if cv2.waitKey(10) == 27:
        break
cv2.destroyAllWindows()


И вот этоprint(ix, iy, x, y) я хочу добавлять в файл выборочно

UPDATE, ПОИГРАЛСЯ С ТАКИМ ВАРИАНТОМ, НО ОН НЕ РАБОТАЕТ КАК НАДО
while True:    
            if cv2.waitKey(10) == ord('w'):       
                file_path = 'log.txt'
                sys.stdout = open(file_path, "a")
            if cv2.waitKey(10) == ord('q'):
                break
        cv2.destroyAllWindows()


os.system('cls' if os.name == 'nt' else 'clear')
                print("\nCoords x, y, ix, iy)


Но есть две проблемы:

Он печатает со второго изображения (у меня идут 1, 2, 3)
И даже с учетом чистки, он все-равно добавляет все стертые выводы
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
drygdryg
@drygdryg
Python-разработчик
Сохраняете перед выводом то, что выводите, в переменную, затем при нажатии клавиши записываете значение переменной в файл.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 22:03
3000 руб./за проект
23 нояб. 2024, в 21:53
30000 руб./за проект
23 нояб. 2024, в 21:49
1000 руб./в час