【发布时间】:2019-01-26 12:03:25
【问题描述】:
如何在 tkinter 框架内运行命令提示符?我知道如何使用“pygame”,但这些方法不起作用 - 命令提示符只是在另一个窗口中运行。
我试着这样做:
import tkinter as tk
import os
import subprocess
root = tk.Tk()
root.geometry("640x480")
frame = tk.Frame(root)
frame.pack(fill="both", expand=True)
child_env = dict(os.environ)
child_env["SDL_WINDOWID"] = str(frame.winfo_id())
child_env["SDL_VIDEODRIVER"] = "windib"
p = subprocess.Popen(["cmd.exe"], env=child_env)
root.mainloop()
但是,正如我所说,它不起作用。
【问题讨论】:
-
这个问题已经问了好几次了。
-
目前支持所有 Windows 控制台应用程序的唯一方法是隐藏控制台窗口并使用低级控制台 API 不断轮询输入缓冲区和活动屏幕缓冲区以进行更改。这就是替代控制台(如 ConEmu)的实现方式。
-
对于 Windows 10,微软计划在秋季发布新的pseudoconsole feature。在 Python 方面,子进程模块(已在 3.7 中添加)中对
lpAttributeList的支持需要扩展以支持PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE。也许CreatePseudoConsole和创建无缓冲管道FD 可以包装为pty.openpc(size, flags) -> (fdin, fdout, hpc)。
标签: windows python-3.x tkinter command-line subprocess