注意:在崇高文本中,有许多关于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
的单引号可以替换为空格。他们将多个输入分开。
答案 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