Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows似乎检测到Python的错误版本_Python_Windows_Bash_Python 3.x - Fatal编程技术网

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

Windows似乎检测到Python的错误版本,python,windows,bash,python-3.x,Python,Windows,Bash,Python 3.x,因此,我认为我的系统没有正确识别python3存在问题。我正在windows终端上使用Windows10和Ubuntu上的Bash。我的程序正在尝试运行并行进程,当我使用: closeInput = input("Press ENTER to exit.") 我的终端响应为: File "string>", line 0 SyntaxError: unexpected EOF while parsing 我在终端上使用以下命令调用程序: python3 calling_proces

因此,我认为我的系统没有正确识别python3存在问题。我正在windows终端上使用Windows10和Ubuntu上的Bash。我的程序正在尝试运行并行进程,当我使用:

closeInput = input("Press ENTER to exit.")
我的终端响应为:

File "string>", line 0

SyntaxError: unexpected EOF while parsing 
我在终端上使用以下命令调用程序:

python3 calling_process.py
所以我知道Python2.7使用了
raw\u input()
,而python3+现在使用
input()。但是我想测试一些东西,所以我用
raw\u input
替换了
input()
,如下所示:

closeInput = raw_input("Press ENTER to exit.")
并使用相同的命令:

python3 calling_process.py
而且它毫无差错地工作。尽管我在命令行中显式地使用了
python3
,但有人能解释为什么会发生这种情况吗

!!当我输入
python3--version
时,它返回
version3.5.2

我已经包括了一个截图,我的照片


无论出于何种原因,您的脚本似乎只使用python 2而不是python 3运行
raw_input
在python 3中甚至不存在-如果您尝试使用它,应该会看到
NameError

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
这是因为在Python2中,
input
试图解析您键入的内容-如果您什么也不键入,那么它会引发这个
SyntaxError
。发生这种情况的原因是您无法从多处理产生的进程中读取stdin。这是为了防止子进程从主进程窃取输入

使用python 2而不是python 3的原因是调用子流程的方式:

program = "python"
arguments = ["called_process.py"]
os.execvp(program, (program,) + tuple(arguments))

您正在执行的是
python
,而不是
python3
!这意味着您将获得默认的python,它必须是Python2。如果您将其更改为
program=“python3”
,这将帮助您克服错误。

您是否缺少一些右括号。您如何使用此closeInput。这是来自PEP31111:
raw\u input()
被重命名为
input()
。也就是说,新的
input()
函数从
sys.stdin
中读取一行,并返回它,同时去掉尾随的换行符。如果输入过早终止,则会引发
eoferor
。要获取
input()
的旧行为,请使用
eval(input())
。林克:是的,我知道。我更想问的是,为什么我的系统会恢复到python的旧版本,尽管我在终端中显式调用了python3。啊,我明白了,也许一开始我没有正确阅读你的帖子,所以-我很肯定你是对的,你得到的是python 2而不是python 3。我们需要知道的是为什么!你到底是如何启动子流程的?是的!我包括了两个新的屏幕截图,但我不确定为什么我的系统在显式写出python3时会转换回python2。在终端截图中,它显示了从我打开终端的那一刻起,到我的程序执行为止!我现在明白了问题所在——我编辑了答案以反映它。(最后一段)作为旁注-如果您试图运行并行进程,我认为您需要的是多处理模块,而不是各种
os.exec…
函数-它们都替换当前正在运行的进程,而不是创建新进程。它们也会分叉当前的进程,因此不存在将不同版本的python混淆的问题。非常感谢!成功了。我将研究多处理模块!
program = "python"
arguments = ["called_process.py"]
os.execvp(program, (program,) + tuple(arguments))