【问题标题】:Python Interpreter crashing in Powershell ISEPython解释器在Powershell ISE中崩溃
【发布时间】:2015-07-21 19:55:56
【问题描述】:

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

这可能是什么问题?

【问题讨论】:

  • 好的,感谢您的深入回答,如果您不想要,您可以将其发布为答案,我会接受。
  • 我认为它更适合Super User。您可以在那里提问并提供新问题的链接吗?
  • 也许模组可以把问题移到那里?

标签: python windows powershell powershell-ise


【解决方案1】:

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 运行时库使用文件描述符 0、1 和 2 作为标准 FILE streamsstdinstdoutstderr 打开这些。启动进程时,可以将任何标准句柄设置为打开文件或管道。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多