我正在使用Popen()启动一个Windows应用程序,并且弹出一个Windows CMD控制台,我需要监视标准输入/输出。有没有办法可以立即最小化此CMD窗口?控制台窗口本身干扰了Popen()启动的应用程序,因为它遮挡了可见桌面。
我使用Python 2.6在winXP 32上。
谢谢!
答案 0 :(得分:2)
如果CMD控制台具有非标题的标题,您可以获取它的句柄并使用以下内容将其最小化(仅在该过程启动后):
import win32gui
handle = win32gui.FindWindow(None, cmd_window_title)
win32gui.ShowWindow(handle, 6)
6适用于SW_MINIMIZE
(请参阅MSDN doc for the ShowWindow() function)
当然,您应该添加适当的检查,例如等待窗口出现等等。
答案 1 :(得分:0)
您是否正在将python文件的扩展名更改为.pyw ?,使用pyw,python解释器不会显示Windows控制台,关于stdot / stdin,您可以使用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 :(得分:0)
以下内容将根据其pid最小化新创建的应用程序。
基于https://stackoverflow.com/a/4875055/3061838和https://stackoverflow.com/a/44736622/3061838的答案。
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)