为什么Python脚本读取文件会导致我的计算机发出嘟嘟声?

为什么Python脚本读取文件会导致我的计算机发出嘟嘟声?,python,Python,我编写了一个小模块,它将搜索一个目录及其所有子目录中的文件,以查找输入字符串的出现。有几次它很方便,如果我记得我使用的函数/变量名,那么主要是查找旧脚本 所以,前几天当我使用这些功能时,我完全被搞糊涂了,开始非常微弱地从我桌子另一边的耳机里听到重复的嘟嘟声。起初我以为是有人的电话响了。但是没有,Python是通过摩尔斯电码与我通信的 我不知道为什么会这样。我一直在运行这些函数并收到嘟嘟声,但并不总是以相同的模式。这些函数仅打开具有读取权限的文件。代码就是这样的: import os import

我编写了一个小模块,它将搜索一个目录及其所有子目录中的文件,以查找输入字符串的出现。有几次它很方便,如果我记得我使用的函数/变量名,那么主要是查找旧脚本

所以,前几天当我使用这些功能时,我完全被搞糊涂了,开始非常微弱地从我桌子另一边的耳机里听到重复的嘟嘟声。起初我以为是有人的电话响了。但是没有,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's 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\u crawl()
要向下爬网的目录、要搜索的字符串以及要将输出文本文件写入的目录。例如:
init\u crawl(r'C:\directory to crawl,'foo',r'C:\output directory')

我甚至不知道该问些什么具体问题,但为什么会这样?我可以看出,当函数试图读取PDF和电子表格等非文本文件时,通常会发出嘟嘟声。有时终端也会冻结

输出只是一个csv,其中包含找到字符串的文件路径列、行号和包含字符串的行。

此行:

print count,line,dir_element
如果您向程序提供二进制文件,则可能正在打印

为了测试,这里有一个我写的小代码。Python将尝试按音符播放它。别担心。开心点:)


嗯,当你运行其他正在进行昂贵磁盘操作的程序时,你能听到嘟嘟声吗?也许你的硬盘已经损坏,并发出了死亡不可避免的警报?你刚刚发现,回显不可打印的ASCII字符可能会产生副作用,.@M.Baum ASCII的提示包括一些控制字符,如钟形字符,但也有其他字符(如垂直制表符等)。它们现在并没有真正被使用,至少不是为了最初的目的。
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