Python从剪贴板下载URL

时间:2013-10-24 23:48:40

标签: python url clipboard

我正在尝试下载剪贴板中包含的URL,但我无法找到一种方法来阻止一遍又一遍地下载同一页面。这是我尝试过的,但我得到错误TypeError: 'int' object has no attribute '__getitem__'这是什么意思?它说错误在第13行,这是它检查URL是否有效的地方。

import time
import os
import urllib

basename = "page"
extension = ".html"
count=0
old_url = ""

while(1):
    time.sleep(1) #check clipboard every second
    clipboard = os.system("pbpaste") # get contents of clipboard
    if clipboard[:4] == "http" and clipboard != old_url: # check if valid URL and is diffrent
        while os.path.exists(basename+str(count)+extension): # Create new name
            count=count+1
        old_url = clipboard
        name=basename+str(count)+extension
        data=urllib.urlopen(clipboard).read() #get page data
        file(name, "wb").write(data) # write to file

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

clipboard = os.system("pbpaste")

原因如下:

In [3]: ?os.system
Type:       builtin_function_or_method
String Form:<built-in function system>
Docstring:
system(command) -> exit_status

Execute the command (a string) in a subshell.

os.system返回命令的退出状态,而不是命令的stdout。

请尝试使用subprocess模块:

import subprocess
clipboard = subprocess.check_output('pbpaste', shell=True)

请记住,它可能是空白的(或少于五个字符),这会导致程序在执行clipboard[:4]时崩溃。最佳做法是在切片之前检查可切片对象的长度:if (len(clipboard) > 4),或者更好,if (clipboard.startswith('http'))

祝你好运,编码愉快!