打开URL并返回shell

din*_*s66 5 python shell always-on-top openurl

我在python 3上运行一个脚本,它使用webbrowser.open()打开一个URL,并立即需要用户输入.问题是活动窗口现在是浏览器而不是python shell,并且总是需要Alt-Tab或click才能提供答案.你可以想象成千上万的图像是多么令人沮丧.代码就像这样简单:

 for rP in images:
     webbrowser.open(rP)
     decision = str(input('Is image '+str(rP)+' ok?')
Run Code Online (Sandbox Code Playgroud)

我想有三种方法可以解决这个问题,但我似乎找不到任何一种方法.我在webbrowser.open()命令中尝试了'autoraise'选项无济于事.我猜这两种解决方案都会如此简单,以至于我事后会碰到脑袋.

所以:
解决方案#1:在输入行之前有一个命令,它使shell窗口处于活动状态,而不是浏览器.
解决方案#2:在后台打开网页,从而不会离开外壳.
解决方案#3:给shell窗口一个"always on top"属性.

有任何想法吗?

Nic*_*sso 1

视窗

这是使用 Python 2.7.8 进行测试的,使用partybuddha 发布的双重 AppActivate 技巧eryksun 发布的睡眠技巧

from webbrowser import open as browse
from win32com.client import Dispatch
from win32gui import GetForegroundWindow
from win32process import GetWindowThreadProcessId
from time import sleep

images=['http://serverfault.com', 'http://stackoverflow.com']

for rP in images:
    _, pid = GetWindowThreadProcessId(GetForegroundWindow())
    browse(rP)
    sleep(1)
    shell = Dispatch("WScript.Shell")
    shell.AppActivate(pid)
    shell.AppActivate(pid)
    decision = raw_input('Is image ' + str(rP) + ' ok? ')
Run Code Online (Sandbox Code Playgroud)

如果没有 1 秒的睡眠,浏览器会保持焦点,就好像 AppActivate 发生得太早一样。

操作系统

#!/usr/bin/env python
from webbrowser import open as browse
from subprocess import check_output

images=['http://serverfault.com', 'http://stackoverflow.com']

for rP in images:
     term = check_output(['/usr/bin/osascript', '-e',
         'copy path to frontmost application as text to stdout']).strip()
     browse(rP)
     check_output(['/usr/bin/osascript', '-e',
         'tell application "%s" to activate' % term])
     decision = raw_input('Is image ' + str(rP) + ' ok? ')
Run Code Online (Sandbox Code Playgroud)

这段代码是用Python 2.7.5测试的,所以可能需要调整才能与Python 3一起使用,但核心思想是使用osascript获取最前面的应用程序,然后在浏览器窗口中打开URL后激活它。