Windows似乎被检测到错误版本的Python

时间:2018-01-26 05:12:04

标签: python windows bash python-3.x

所以我认为我的系统没有正确识别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的屏幕截图。

calling_process.py

called_pocess.py

1 个答案:

答案 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,这将让你超越你的错误。