Python 2 raw_input():在WINDOWS 7命令提示符下读取一行时的EOFError

时间:2014-03-11 05:58:35

标签: python windows cmd raw-input

注意:在崇高文本中,有许多关于python raw_input()的问题。关于sublime,这个问题。在Windows命令提示符下调用python代码,与sublime终端不同,它支持交互式输入。


我有一个python程序,它使用内置函数raw_input()获取用户输入。见下文。

def password_score():
    pwd = raw_input('Enter a password: ')
    gname = raw_input('Enter your first name: ')
...

我在cmd中用

调用该程序
echo password_score()|python -i a06q1.py

其中a06q1.py是文件名。 python目录的路径已临时添加到系统变量%PATH%。我在文件的目录中。我的操作系统是Windows 7.我使用的是python 2.6。同样的命令一直有效。

然后cmd返回

File "<stdin>", line 1, in <module>
File "a06q1.py", line 27, in password_score
    pwd = raw_input(p_prompt)
EOFError: EOF when reading a line

有没有办法绕过它在cmd内

编辑:我刚试过iOS终端。使用与cmd(带引号)相同的命令,它将返回相同的错误。我使用的命令行有什么问题吗?谢谢!


编辑:塞巴斯蒂安的回答解决了这个问题。该命令应该如下适应窗口。

printf "a06q1.password_score()\n'arg1\n'arg2"|python -i -c "import a06q1"

成功\n的单引号可以替换为空格。他们将多个输入分开。

2 个答案:

答案 0 :(得分:1)

您要做的不是从命令行调用特定函数的方法。 您的代码中需要if __name__ == "__main__" - 块。

在文件的末尾:

`if __name__ == "__main__"`:
     password_score()

现在通过以下方式运行程序:

python a06q1.py

如果从命令文件运行python文件,__name__ - 变量将为"__main__"。请注意,如果将a06q1导入其他某个python文件,则该名称将等于模块名称,因此if __name__块的计算结果为False

来自python docs

  

此模块表示(否则为匿名)范围   解释器的主程序执行 - 从中​​读取命令   标准输入,脚本文件或交互式提示。它   是这个习惯性的“条件脚本”节的环境   运行


正如J.F Sebastian在评论中所写,您还可以通过提供-c开关来执行特定的python命令。以下内容将导入a06q1并运行function_name

python -c "from a06q1 import function_name; function_name()"

答案 1 :(得分:1)

EOF意味着没有更多输入。确实如此,-i选项消耗了唯一的一行:

$ echo "f()" | python -i -c "def f(): print('x'); input('y\n')"
>>> x
y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in f
EOFError: EOF when reading a line
>>> 

提供更多输入:

$ printf "f()\n'z'" | python -i -c "def f(): print('x'); print(input('y\n')*3)"
>>> x
y
zzz
>>> 

正如你所说:指定一个以这种方式运行的函数是“规范的坏”。如果您事先不知道,想要运行什么功能,那么可以将其作为:

运行
$ python -c "from a06q1 import password_score as f; f()" < input_file.txt