Python readline извлекает проблемы стандартного вывода - PullRequest
0 голосов
/ 06 июля 2018

У меня есть текст, и я печатаю каждую его строку.

я хочу остановить (в первый раз просто напечатайте «флаг!», А во второй раз остановить) текст каждый раз, когда читаемая строка является флагом

но это не останавливает

кодовая часть:

    import sys
    path = "/somepath/story_line"
    flag = "010001"

    def process(line):
        sys.stdout.write(line)
        sys.stdout.flush()
        time.sleep(2.4)
        line = fileIN.readline()


    with open(path, "r") as content:
        if line != flag:
            for line in content:
                process(line)
                if line == path:
                    print ("flag")

текстовая часть

[START]
010001 
welcome traveler,
This story begins in a dark era where Evil took over the weak... Many times ago a dark force came from beyond the sky and over*** the balance of this land.
You are the hope and new strengh of this world, please choose wisely
....


....
Let the story begin










[END]
010001
GAME OVER !!!

Я новичок в Python, и я попытался с подпроцессом или добавить каждую строку в список, разобрать список, но ничего не делать. может кто-нибудь может облегчить это?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я не уверен, что понял вопрос и код, похоже, вы пытаетесь прочитать строки из файла несколько раз?

Используя функцию "open", вы можете свободно перебирать результаты, то есть читать строку за строкой.

Вот как я бы сделал то, что вы описываете

import sys
import time
path = "/path/to/my/file"
flag = "010001"


def process(line):
    if line.strip() == flag:
        process.flagcount += 1
        if process.flagcount == 1:
            sys.stdout.write("flag!\n")
        return process.flagcount
    sys.stdout.write(line)
    time.sleep(2.4)
    return 0

process.flagcount = 0 #initialise a static counting attribute inside process()

#open the file
with open(path, "r") as content:
    #read each line
    for line in content:
        #process it and if it tells us it's counted more than one flag then stop reading.
        if process(line) > 1:
            break
0 голосов
/ 06 июля 2018

Ваша проблема в том, как python передает переменные. В конце вашей функции process(line), вы делаете

line = fileIN.readline()

Однако этот только изменяет line в текущей области действия . После выхода из функции это изменение теряется.

Решение состоит в том, чтобы вместо присвоения line в конце функции просто сделать

return fileIN.readline()

и ниже заменить строку

process(line)

с

line = process(line)
...