打开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后激活它。