Popen() 调用时 CMD 窗口最小化?
我正在用 Popen() 启动一个 Windows 应用程序,但会弹出一个 Windows CMD 控制台。我需要监控这个控制台的标准输入和输出。有没有办法让这个 CMD 窗口立刻最小化?这个控制台窗口干扰了我用 Popen() 启动的应用程序,因为它挡住了桌面。
我在使用 Windows XP 32 位和 Python 2.6。
谢谢!
3 个回答
0
下面的内容会根据新创建的应用程序的进程ID(pid)来最小化这个应用程序。
import win32process
import win32gui
import win32con
import time
def minimize_cb(handle, pid):
''' Call back function used by minimize'''
__, processId = win32process.GetWindowThreadProcessId(handle)
if processId == pid:
win32gui.ShowWindow(handle, win32con.SW_MINIMIZE)
def minimize(pid):
'''Minimize window'''
try:
win32gui.EnumWindows(minimize_cb, pid)
except Exception as e:
print('minimize failed', e)
proc = subprocess.Popen(...)
# you may need to wait a little before the window is created
# sorry I don't have a better method...
time.sleep(1)
minimize(proc.pid)
0
你是不是把你的Python文件的后缀改成了.pyw?用.pyw后,Python解释器就不会显示窗口控制台了。关于标准输出和标准输入,你可以使用subprocess.PIPE来处理。
import subprocess
cmd = subprocess.Popen('program.exe', shell=true,
stdout=subprocess.PIPE, stdin=subprocess.PIPE)
#read stdout
print cmd.stdout.read()
#write stdin
cmd.stdin.write('DATA')
或者你可以使用 Popen.communicate
,具体可以参考这个链接:http://docs.python.org/library/subprocess.html#popen-objects
2
如果命令提示符(CMD)窗口有一个明确的标题,你可以获取它的句柄,然后用下面的代码把它最小化(在进程启动后立即执行):
import win32gui
handle = win32gui.FindWindow(None, cmd_window_title)
win32gui.ShowWindow(handle, 6)
这里的6代表的是 SW_MINIMIZE
(你可以查看 MSDN关于ShowWindow()函数的文档)
当然,你还应该添加一些适当的检查,比如等待窗口出现等等。