while 循环中的 open 语句有问题

something wrong with with open statement which is in while loop

我删掉了一部分我试图完成的脚本。我期待每次迭代后 mylineS.split()[0] 的新结果。 outS.txtoutT.txt 是每次迭代 commandC 的结果,每次迭代的结果都不同。但是 mylineS.split()[0] 为每次迭代带来第一个结果。

我猜我的方法有问题,知道吗?

B = 0
while B < len(Source_Tdevs):
    devS = Source_Tdevs[B]
    devT = Target_Tdevs[B]
    subprocess.run(commandC, shell=True)
    print (devS)
    with open('outS.txt', 'r') as gS:
        CS = len(gS.readlines())
        mylineS = linecache.getline('outS.txt', CS -1)
        Source_Tdevs_SGs.append(mylineS.split()[0])
        **print (mylineS.split()[0])**
        gS.close()
    with open('outT.txt', 'r') as gT:
        CT = len(gT.readlines())
        mylineT = linecache.getline('outT.txt', CT - 1)
        Target_Tdevs_SGs.append(mylineT.split()[0])
        gT.close()
    subprocess.run('del outS.txt, outT.txt', shell=True)
    B= B + 1

commandC 在subprocess.run(commandC, shell=True) 的上方一行。我在写底部。

commandC = 'set "SYMCLI_OFFLINE=1" & set "SYMCLI_DB_FILE=C:\PROGRAM FILES\EMC\SYMAPI\DB\SYMAPI_DB.BIN" & call symaccess -sid %s list -type storage -dev %s > outS.txt & call symaccess -sid %s list -type storage -dev %s > outT.txt' % (
        sid, devS, sid, devT)

滥用 linecache 模块。 linecache 用于从 Python source code:

获取 source code lines

The linecache module allows one to get any line from a Python source file, while attempting to optimize internally, using a cache, the common case where many lines are read from a single file. This is used by the traceback module to retrieve source lines for inclusion in the formatted traceback.

正如文本所暗示的那样,该模块还将在内存中保留文件的内容,因此仅在第一个 运行 时给出正确的输出。一个简单的补救方法是使用

使缓存无效
linecache.checkcache('outS.txt')

虽然更好的做法是 完全不 使用 linecache(这不是为了这个,毕竟你的文件在不断变化);相反,只需阅读使用 .readlines() 中的所有行并使用 [-1] 提取最后一行,例如:

lines = gS.readlines()
last_line = lines[-1]