簡體   English   中英

raw_input()中的Python EOF錯誤

[英]Python EOF Error in raw_input()

我正在嘗試在命令提示符下從用戶獲得輸入。 該程序以“ cat text.txt | ./thescript.py”的方式從文本文件中讀取數據。

在有問題的腳本處,所有數據已經​​被讀取,處理並放入列表列表中。

現在,我遍歷該列表以查找有問題的項目。 代碼基本上如下所示:

for invoice in parsedlist:
      if invoice[-1] == 3:
          sys.stderr.write("triple duplicate at " + invoice[2]+' : ' + invoice[3]+"\n")
          sys.stderr.write("continue Y or N \n")
          answer = raw_input("Type your answer here")
          if answer == 'N':
              sys.exit(1)
          else: 
              pass`

此代碼導致EOFError。 據我了解,在這種情況下,stdin是從cat讀取的,並且因為它已經到達EOF,這就是為什么raw_input在這里得到EOF的原因? (我認為)目標是讓腳本為標准錯誤打印警告,然后讓我選擇是否忽略警告並繼續還是完全退出。 最后,所有輸出將輸出到標准輸出,並且將不包含任何錯誤警告或響應。 我已經看到了使用try / exception的示例,但在這種情況下我無法理解。 (例如,為什么raw_input不等待輸入?)

我想我可能只是以錯誤的方式攻擊了這個問題,因此造成了一個問題,最好繞開然后跳過。 一如既往地提供任何幫助。

這可以在Windows下運行(我通過運行python cons.py < cons.py對其進行了測試,並且能夠看到提示,但未收到有關EOF的錯誤):

import sys

for line in sys.stdin:
    print line

sys.stdin = open('CON', 'r')
q = raw_input('---->')

在Unix下,您可能只需要用/ dev目錄中的內容替換'CON'。

是的,問題是您的raw_input()正在從標准輸入讀取,該輸入是cat的輸出,位於EOF處。

我的建議是消滅cat 沒有必要; Python非常有能力自行讀取文件。 在命令行中傳遞文件名,打開它,然后自己閱讀。

import sys

for line in open(sys.argv[1]):
    # process line

如果需要處理多個文件,請簽出fileinput模塊; 它可以輕松地像讀取多個文件一樣處理讀取多個文件,這正是cat為您服務的。

目的是讓腳本為標准錯誤打印警告,然后讓我選擇是否忽略警告並繼續還是完全退出。

您希望選擇來自交互式提示,而數據來自文件嗎? 好吧,現在您正在做的事情與原始程序有所不同:您正在從不同的地方閱讀這兩個東西,它們以前來自同一地方。 因此,您需要更新設計以允許這樣做。

為什么raw_input不等待輸入

raw_input等待獲取一行輸入所需的時間。 如果要從文件重定向標准輸入,則輸入行始終立即可用(很好,例如受硬盤速度限制),直到EOF為止,此時不再可用。 簡而言之,它不等待您回答問題的原因就與不等待您提供發票數據的原因相同:因為從文件重定向后,您不再是數據源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM