python脚本重新打开命令行方法(附测试脚本)

本文介绍了如何在Python脚本中使用`ctypes`库控制命令行的显示与隐藏,包括如何打开和关闭控制台,以及解决`print`和`input`函数在隐藏控制台下可能出现的问题。通过实例展示了如何配合Tkinter创建一个带有打开、关闭和写入功能的窗口来操作控制台。
摘要由CSDN通过智能技术生成

上次介绍的是关闭命令行的方法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自由打开关闭控制台

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值