Почему Python script для чтения файлов заставляет мой компьютер издавать звуковые сигналы?

Я написал небольшой модуль, который будет искать файлы в каталоге и во всех его подкаталогах для появления некоторой входной строки. Это было удобно несколько раз, главным образом для поиска старых сценариев, если я помню какое-то имя функции/переменной, которое я использовал.

Итак, на днях я был полностью озадачен, когда использовал функции и начал слышать, очень слабо, из наушников, сидящих на противоположной стороне моего стола, повторяя звуковые сигналы. Сначала я подумал, что кто-то звонит по телефону. Но нет, Python общался со мной через код Морзе.

Я не знаю, почему это происходит. Я продолжал выполнять функции и получать звуковые сигналы, но не всегда в одном шаблоне. Функции открывают только файлы с правами на чтение. Код точно такой:

import os
import glob

def directory_crawl_for_string(dir_name, string, ofile):
    """Crawl dir_name and all of its subdirectories, opening files and
    checking for the presence of a string"""

    #get input directory listings
    dir_contents = glob.glob(dir_name)
    #loop over the listings
    for dir_element in dir_contents:
        if(os.path.isfile(dir_element)):
            #read the file, checking for the string
            check_for_string(dir_element, string, ofile)
        else:
            if(os.path.isdir(dir_element)):
                directory_crawl_for_string(dir_element + '\\*', string, ofile)

def check_for_string(dir_element, string, ofile):

    try:
        ifile = open(dir_element, 'r')
    except IOError as e:
        pass
    else:
        count = 1
        for line in ifile:
            if(string in line.lower()):
                print count,line,dir_element
                ofile.write('%s,%d,%s' % (dir_element, count, line))
            count += 1
        ifile.close()

def init_crawl(start_dir, string, output_dir):
    """args:
            start_dir - directory to start the crawl at
            string - string to search for
            output_dir - directory to write output text file inside of"""

    if(output_dir):
        fn = output_dir.rstrip('/').rstrip('\\') + '/dirs.txt'
    else:
        fn = 'dirs.txt'
    ofile = open(fn, 'w')
    ofile.write('file path,line number of occurance of "%s",exact line\n' % string)
    directory_crawl_for_string(start_dir, string, ofile)
    ofile.close()
    print('list of files containing "%s" written to "%s"' % (string, fn))

Чтобы запустить его, вы передаете init_crawl() каталог для сканирования, из строки поиска и каталога для записи выходного текстового файла. Например: init_crawl(r'C:\directory-to-crawl', 'foo', r'C:\output-directory')

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

Вывод - это просто csv с столбцами для путей к файлам, где найдена строка, номера строк и строка, содержащая строку.

Ответ 1

Эта строка:

print count,line,dir_element

вероятно, печатает символ BEL, если вы подаете свои двоичные файлы программы.

Чтобы проверить, вот небольшой код, который я написал. Python попытается сыграть в нее записку для заметок. Не волнуйся. Будьте счастливы:)

def bel():          return chr(7)
def wait(duration): return chr(0) * (duration*1000000)
song = ''
for _ in range(5):
    song += bel()
    song += wait(1)
    song += bel()
    song += wait(1)
    song += bel()
    song += wait(5)
print song