2017-08-28 250 views
0

我有一个input.txt文件,其中包含以下内容。python标准输入与txt文件和输入()函数

3 
4 5 

我想通过在命令行中使用以下命令将其用作标准输入。

python a.py < input.txt 

在a.py剧本,我想读通过input()功能线的输入线。我知道有更好的方法来读取stdin,但我需要使用input()函数。

line1 = input() 
line2 = input() 

天真的方法没有奏效。我收到以下错误消息。

File "<string>", line 1 
    4 5 
    ^
SyntaxError: unexpected EOF while parsing 

回答

1

这样一来就可以了,它的工作原理:

read = input() 
print(read) 

,但你只是读一行。

input() DOC:

然后该功能可以读取从输入的线,将其转换成字符串 (剥离的后换行),并返回。

这意味着,如果该文件不以一个空行结束了,或者有什么不一样,文件的最后一个非空行不以end of line字符结尾,你会得到exceptions.SyntaxError和最后一行不被阅读。

+0

我增加了更多的细节。当我尝试阅读第二行时出现错误。 – zcadqe

+0

@hwchung我编辑了我的答案。为什么你必须坚持使用'input()'func?正如我看到的情况,或者在文件的末尾添加了一行末尾行,或者除了使用input()来读取作为脚本的标准输入传递的文件的内容之外,您还必须使用其他方法。存在其他几个选项,只是让我知道,如果你对他们感兴趣;) –

+0

感谢您的答案。我想坚持使用input()函数,因为我试图做的是调试我在HackerRank网站中使用的代码。在那里我使用input()函数来接受输入。使用本地机器进行调试要容易得多。所以我正在尝试编写一个用于本地输入的代码。在我的文件末尾添加最后一行代表什么意思? – zcadqe

0

你提到HackerRank;看看我的一些陈旧意见,我认为我选择放弃input来代替sys.stdin操纵。 input()next(sys.stdin)非常相似,但后者将处理EOF就好了。

举例来说,我的答案https://www.hackerrank.com/challenges/maximize-it/

import sys 
import itertools 

# next(sys.stdin) is functionally identical to input() here 
nK, M = (int(n) for n in next(sys.stdin).split()) 

# but I can also iterate over it 
K = [[int(n) for n in line.split()][1:] for line in sys.stdin] 

print(max(sum(x**2 for x in combo) % M for combo in itertools.product(*K)))