pythoneof错误_raw_input()中的Python EOF错误

I am trying to get input from the user at the command prompt. The program reads in data from a text file in the manner of "cat text.txt | ./thescript.py"

At the point of the script in question, all data has already been read in, processed, and put into a list of lists.

Now I am iterating through that list of lists looking for questionable items. The code basically looks like this:

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`

This code results in an EOFError. From what I already understand, stdin is the read from cat in this case and since it has already reached EOF that is why raw_input gets EOF here? (I think) The objective is to have the script print a warning to standard error and let me choose whether to ignore the warning and continue or quit entirely. In the end all output goes to std out and will not include any of the error warnings or responses. I have seen examples that use a try/exception but I have not been able to make sense of it in this context. (Eg. Why does the raw_input not wait for input?)

I think I may just be attacking this problem in the wrong way and thus creating a problem that could be better walked around then jumped over. Any help is appreciated as always.

解决方案

Yes, the problem is that your raw_input() is reading from standard input, which is the output of cat, which is at EOF.

My suggestion would be to eliminate the cat. It is not necessary; Python is perfectly capable of reading files on its own. Pass the file name on the command line, open it, and read it yourself.

import sys

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

# process line

If you need to handle multiple files, check out the fileinput module; it easily handles reading multiple files as if they were one, which is what cat does for you.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值