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 は、コマンドの stdout ではなく、コマンドの終了ステータスを返します。

代わりにsubprocessモジュールを試してください:

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

ただし、空白 (または 5 文字未満) である可能性があることに注意してください。これを行うと、プログラムがクラッシュしますclipboard[:4]。ベスト プラクティスは、スライス可能なオブジェクトをスライスする前に長さを確認することif (len(clipboard) > 4)ですif (clipboard.startswith('http'))

幸運と幸せなコーディング!

于 2013-10-24T23:54:10.710 に答える