所以我认为我的系统没有正确识别python3存在问题。我在Windows终端上使用Windows 10和Ubuntu上的Bash。我的程序正在尝试运行并行进程,当我使用时:
closeInput = input("Press ENTER to exit.")
我的终端回复:
File "string>", line 0
SyntaxError: unexpected EOF while parsing
我使用以下方法在终端上调用程序:
python3 calling_process.py
所以我知道Python 2.7使用raw_input()
,而python3 +现在使用input()
。但我想测试一些内容,所以我将input()
替换为raw_input
,如下所示:
closeInput = raw_input("Press ENTER to exit.")
并使用相同的命令:
python3 calling_process.py
它没有错误。虽然我在命令行中明确使用python3
,但任何人都可以提供任何有关可能发生这种情况的见解吗?
!当我输入python3 --version
时,它会返回version 3.5.2
我已添加了terminal window的屏幕截图。
答案 0 :(得分:0)
看起来无论出于何种原因,你的脚本只能运行python 2而不是python 3. raw_input
在python 3中甚至不存在 - 你应该看到{{ 1}}如果你试图使用它:
NameError
但是python 2中的Python 3.5.3 (default, Jul 16 2017, 23:50:50)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> t = raw_input()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'raw_input' is not defined
可以准确地产生你得到的错误:
input
那是因为在python 2中,Python 2.7.13 (default, May 9 2017, 12:06:13)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> t = input()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 0
^
SyntaxError: unexpected EOF while parsing
试图解析你输入的内容 - 如果你什么都不输入,那么它会引发这个input
。发生这种情况的原因是你无法从多处理产生的进程中读取stdin。这是为了防止子进程窃取主进程的输入。
你得到python 2而不是python 3的原因是你调用子进程的方式:
SyntaxError
您正在执行program = "python"
arguments = ["called_process.py"]
os.execvp(program, (program,) + tuple(arguments))
,而不是python
!这意味着你将获得默认的python,它必须是python 2.如果你把它更改为python3
,这将让你超越你的错误。