2013-03-26 561 views
0

我想知道是否有人可以用下面的Python 3代碼來幫助我。出於某種原因,它沒有做我認爲應該做的事情,我不明白爲什麼。從Python中讀取文件

with open("ModuleShow.txt", "w+", encoding='utf-8') as ModuleShowFile: 
      if ModulesLeft == 0: 
       ModuleLoaded = CommandLine[2] 
       print(ModuleLoaded) 
      else: 
       ModuleLoaded = ModuleToLoad[0] 
       ModuleToLoad.pop(0) 
       ModulesLeft = ModulesLeft - 1 
       #   ModuleFile.write("\n" + ModuleLoaded)              
       #   CommandsFile.write("module show" + ModuleLoaded)           
      output = subprocess.Popen(["bash", "-ci", "module show " + ModuleLoaded], stderr=ModuleShowFile) 

#   with open("ModuleShow.txt", "r", encoding='utf-8') as ModuleShowFile:           

      print(ModuleShowFile.read()) 
      for ModuleFileLine in ModuleShowFile: 
       FileLine = ModuleFileLine.split(" ") 

       print(FileLine[0]) 
       if FileLine[0] == "prepend-path": 
        print(FileLine[0]) 
        if FileLine[1] == "PATH": 
         ModulePathFile.write(FileLine[2] + " " + ModuleLoaded + "\n") 
        elif FileLine[0] == "module": 
         ModuleToLoad.append(FileLine[2]) 
         ModulesLeft = ModulesLeft + 1 

所以我在做什麼在上面的代碼信息寫入名爲ModuleShow.txt文件,然後分析這些信息,並寫入該分析信息到一個名爲ModulePath.txt文件,我打開ModulePath.txt之前,但我沒有包括那部分代碼,因爲我相信它與我所遇到的問題無關。所以基本上,當我運行我的腳本時,內容被寫入到文件中,但是當我讀取內容時我什麼都沒有得到。例如,我嘗試使用「print(ModuleShowFile.read())」,但沒有打印出文件是否與內部的內容一起創建。我嘗試了兩個「打開()」行,一個用於寫作,另一個用於閱讀,但它仍然沒有解決問題。希望這是簡單的,我爲這篇長文章道歉。我將不勝感激任何幫助。謝謝。

+0

當你嘗試過使用第二'的open()',一個用於寫,另一個用於讀,你關閉了第一個句柄/離開了第一個'open()'上下文句柄的範圍嗎?換句話說,第二個'open()'是否與第一個相同或更少? – jedwards 2013-03-26 16:59:06

+0

第二個open()的縮進量與第一個open()的縮進量相同。 – user1878012 2013-03-26 17:02:19

回答

0

你甚至需要寫文件ModuleShow.txt嗎?或者你可以只將條目保存在列表中?

如果你真的需要再次讀取他們回來,先關閉文件,像這樣:

with open("ModuleShow.txt", "w+", encoding='utf-8') as ModuleShowFile: 
    # ... whatever (I'm assuming you're writing to the file here) 

# now the file is closed 
with open("ModuleShow.txt", "r", encoding='utf-8') as ModuleShowFile: 
    for ModuleFileLine in ModuleShowFile: 
     # ... now you can read each line 
+0

我已經嘗試過,因爲某些原因,它不起作用。我一直在搞這個,因爲某些原因,當我做了以下操作時,我可以得到輸出: 'with open(「ModuleShow.txt」,「w +」,encoding ='utf-8')as ModuleShowFile:' '#...寫入文件的代碼' 'output.communicate()#這是我從原始帖子中用' 'open(「ModuleShow.txt」,「r」,編碼添加的唯一一行='utf-8')as ModuleShowFile:' ' print(ModuleShowFile.read())' '#原始帖子代碼' – user1878012 2013-03-26 17:22:24

+0

如果我的評論很難理解,我可以編輯我的原始帖子碼。我所做的是取消註釋第二個「open」行,並在此之前添加'output.communicate()'行。任何想法爲什麼我可以在使用'output.communicate()'後讀取文件? – user1878012 2013-03-26 17:29:49

+0

對不起,我錯過了與子進程通信的一點。我猜這個子過程還沒有完成,或者沒有將其輸出刷新到文件中。顯然,wait()或者communic()可以確保它已經完成,但這對我來說是未知的領域。 – Penfold 2013-03-27 12:36:22