gpt4 book ai didi

Python 解释器在 Powershell ISE 中崩溃

转载 作者:可可西里 更新时间:2023-11-01 11:27:25 24 4
gpt4 key购买 nike

我的系统上安装了 python 3,可执行文件的路径已添加到 PATH。当我在 Windows PowerShell (win8.1) 中插入 python 时,它运行良好,但是我想使用 PowerShell ISE 来获得它具有的高级功能。但是,在 PowerShell ISE 中运行 python 会崩溃,并显示以下日志:

python : Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32
In Zeile:1 Zeichen:1
+ python
+ ~~~~~~
+ CategoryInfo : NotSpecified: (Python 3.4.3 (v...ntel)] on win32:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

Type "help", "copyright", "credits" or "license" for more information.
>>>

(抱歉部分是德语)

然后我无法输入任何内容,必须按 Ctrl+C 才能返回到 PowerShell。

这可能是什么问题?

最佳答案

PowerShell ISE 不适用于运行典型的交互式控制台程序,例如 python.exe。它隐藏控制台窗口并重定向 stdout到管道。要在实践中看到这一点,请在 ISE 中运行以下命令:

python.exe -i -c "import ctypes; ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 5)"

在控制台窗口中输入文本,您会看到输入在控制台中回显,但输出通过管道传输到 ISE。


以下是 Windows 的一些简要概述 console applications . powershell.exe、cmd.exe 和 python.exe 都是控制台应用程序,充当控制台服务器(或主机)进程 conhost.exe 的客户端。主机进程创建窗口并运行典型的 GUI 事件循环。当您从 GUI 应用程序(例如 explorer.exe)运行 python.exe 时,Windows 会执行一个新的 conhost.exe 实例,从而创建一个新的控制台窗口。当您从另一个控制台应用程序(例如 powershell.exe)运行 python.exe 时,默认行为是继承父级的控制台。

console API与连接的控制台主机通信。许多函数,例如 WriteConsole , 需要 handle到控制台输入或屏幕缓冲区。如果您连接到控制台,特殊文件 CONIN$表示输入缓冲区,CONOUT$是当前屏幕缓冲区,CON可以引用取决于它是打开阅读还是写作。 (您可能已经在 cmd.exe 中看到过命令,例如 copy con somefile.txt。)

Windows 进程具有三个用于标准 I/O 句柄的字段。对于控制台进程 StandardInput默认为 CONIN$ 的句柄, 和 StandardOutputStandardError默认为 CONOUT$ 的句柄. C 运行时库将这些作为标准打开 FILE streams stdin , stdout , 和 stderr使用文件描述符 0、1 和 2。启动进程时,可以将任何标准句柄设置为打开的文件或管道。

虽然一个进程一次只能附加到一个控制台,但多个进程可以附加到一个控制台。但是,通常只有一个进程处于事件状态。例如,对于 powershell.exe,在运行 python.exe 后,其主线程在后台等待 python.exe 退出。 (请注意,如果在 python.exe 中启动另一个交互式控制台进程然后退出,则此执行模型会严重失败,因为现在 shell 和子进程都在竞争对控制台的访问权限。)

关于Python 解释器在 Powershell ISE 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com