上次介绍的是关闭命令行的方法python脚本隐藏命令行方法(代码内+代码外)-CSDN博客
这次介绍关闭后怎么打开
假如有个A.pyw文件,因为后缀是.pyw,所以运行时没有控制台,但是我们可以再次打开它
import ctypes
kernel32 = ctypes.windll.kernel32
kernel32.AllocConsole()
打开后还需要再写入内容呢,如果这时候直接用print和input函数会出问题
print不报错,但是看不到输出,而input函数会报错,如下
input(): lost sys.stdin
解决方法是重置标准输入输出
import sys
sys.stdout = open('CONOUT$', 'w')
sys.stderr = open('CONOUT$', 'w')
sys.stdin = open('CONIN$', 'r')
此时print和input函数就有作用了
配合上一篇文章就可以写出以下测试代码
from tkinter import Button, Tk, Entry, StringVar
import ctypes
import sys
kernel32 = ctypes.windll.kernel32
def open_():
kernel32.AllocConsole()
sys.stdout = open('CONOUT$', 'w')
sys.stderr = open('CONOUT$', 'w')
sys.stdin = open('CONIN$', 'r')
def close():
kernel32.FreeConsole()
try:
sys.stdout.close()
sys.stderr.close()
sys.stdin.close()
except Exception:
...
def write(text):
if not sys.stdout.closed:
print(text)
close()
root = Tk()
root.title("打开关闭控制台")
root.geometry("270x50")
var = StringVar()
Entry(root, textvariable=var).grid(columnspan=3)
Button(text="写入", command=lambda: write(var.get())).grid(row=1, column=0)
Button(text="打开", command=open_).grid(row=1, column=1)
Button(text="关闭", command=close).grid(row=1, column=2)
root.mainloop()
结果
python自由打开关闭控制台