0

我正在尝试下载剪贴板中包含的 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
4

1 回答 1

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 返回命令的退出状态,而不是命令的标准输出。

尝试使用subprocess模块:

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

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

祝你好运,编码愉快!

于 2013-10-24T23:54:10.710 回答