我正在尝试下载剪贴板中包含的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
答案 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'))
。
祝你好运,编码愉快!