Python 解释器在 Powershell ISE 中崩溃

标签 python windows powershell powershell-ise

我的系统上安装了 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/

相关文章:

python - 在Python中从文本文件追加行以创建矩阵

linux - 带有 ls -l 选项的 smbclient -c

窗口/命令 |如果例如,如何断线字符数达到?

.net - 如何通过Powershell检查交换邮箱?

powershell - Azure部署脚本不断提示 "CurrentStorageAccount is not set"

python - 如何使用python从服务器读取本地PC中的文件

Python df.to_excel() 在 excel 中将数字存储为文本。如何存储为值?

python - Django:在 URL 模板标记中保留 GET 参数

windows - 如何将 findstr 与换行符正则表达式一起使用

bash - powershell bash 循环随机卡住等待键盘输入