2

我剪切了我试图完成的脚本的一部分。我期待mylineS.split()[0]每次迭代后都有新的结果。outS.txt并且outT.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)
4

1 回答 1

0

你在滥用模块linecache。linecache 旨在用于从 Python 源代码中获取源代码行

linecache 模块允许从 Python 源文件中获取任何行,同时尝试使用缓存进行内部优化,这是从单个文件中读取多行的常见情况。回溯模块使用它来检索源代码行以包含在格式化的回溯中。

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

linecache.checkcache('outS.txt')

尽管更好的做法是根本不使用 linecache(它不是为此而设计的,而且您的文件毕竟在不断变化);相反,只需阅读 using 中的所有行并使用.readlines()提取最后一行[-1],例如:

lines = gS.readlines()
last_line = lines[-1]
于 2017-02-09T11:28:19.017 回答