使用 qBittorrent 运行脚本时如何克服 Python 中的 IO 错误 13

Posted

技术标签:

【中文标题】使用 qBittorrent 运行脚本时如何克服 Python 中的 IO 错误 13【英文标题】:How to overcome IO Error 13 in Python when running script using qBittorrent 【发布时间】:2017-04-03 10:47:45 【问题描述】:

我从互联网上下载了很多 linux ISO 种子。我制作了自己的小 Python 脚本,它将向我的 iPhone 发送有关已完成下载的 torrent 详细信息的通知。将种子的名称、标签和大小发送给我。

我使用名为Pushbullet.py 的python 库将通知发送到我的手机。

import os , sys, string, time, random
from datetime import datetime
from os import linesep
from pushbullet import Pushbullet

#Random Sys.Argv replacements
names = ['ubuntu-16.04.1-desktop-amd64.iso', 'Kali-Linux', 'Linux-Mind', 'dog', 'Arch-Linux']
labels = ['Movie', 'TV Show', 'Music', 'Program' ,'Game', 'eBook']
sizes = ['5000000000', '2000000000', '777758998000']
name_rand = (random.choice(names))
label_rand = (random.choice(labels))
sizes_rand = (random.choice(sizes))

#System arguements passed from qBittorrent to this script. This usually should be sys.argv[1-3] but changed for this case.
torrent_name = name_rand
torrent_category = label_rand
torrent_size = sizes_rand

qbittorrent_byte = Decimal(torrent_size)
mebibyte_divisor = Decimal(1048576)
mebibyte_value = qbittorrent_byte / mebibyte_divisor
mebibyte_string = str(round(mebibyte_value,2))

#Pushbullet Config
pb = Pushbullet("API-KEY")
iPhone = pb.devices[0]

t = time.localtime()
date_run = time.asctime(t)

#Pushbullet message templates
pb_title = torrent_category + " Download Completed"
pb_message = "Torrent: " + torrent_name + "\n" + "Size: " + mebibyte_string + " MB" + "\n" + "Label: " + torrent_category + "\n" + "Run on: " + date_run
pb_debug = date_run + "\n" + "Torrent: " + torrent_name + "\n" + "Size: " + mebibyte_string + " MB" + "\n" + "Label: " + torrent_category

def Send_Push():
    push = iPhone.push_note(pb_title, pb_message)
    print "PUSH sent successfully"

def write_file():
    file = open("debug.txt", "a")
    pb_message_debug = date_run + "\n" + "Torrent: " + torrent_name + "\n" + "Size: " + mebibyte_string + " MB" + "\n" + "Label: " + torrent_category
    file.write(pb_message_debug + "\n")
    file.close()

Send_Push()
write_file()

此脚本可用于向我的手机发送测试消息。当我将此文件保存到桌面并使用 CMD 运行它时,它会将消息发送到我的手机,甚至按预期写入 debug.txt 文件。

但是当我尝试将 qBittorrent 配置为在下载完成时运行脚本时,它会将消息发送到我的手机,但不会附加到 debug.txt 文件中。

每当我尝试使用 CMD 运行脚本时,它都可以正常工作。将消息发送到我的手机并附加到 debug.txt

我的理论是 qBittorrent 是我收到 IO Error 13 Permission Denied 的原因..

帮助一个人?接受任何更改..

【问题讨论】:

【参考方案1】:

问题很可能是您相对指定了debug.txt文件的路径。以下行将在 当前工作目录 中创建一个名为 debug.txt 的文件。

file = open("debug.txt", "a")

如果您的 torrent 应用使用默认情况下您没有写入权限的工作目录(例如您的程序文件夹)运行脚本,您将收到权限被拒绝错误。

尝试将路径更改为绝对路径(您具有写入权限的位置,例如您的主文件夹):

file = open(r"C:\users\your_username_here\debug.txt", "a")

这应该可以解决问题。

【讨论】:

以上是关于使用 qBittorrent 运行脚本时如何克服 Python 中的 IO 错误 13的主要内容,如果未能解决你的问题,请参考以下文章

qbittorrent能下载游戏吗

使用多个 if 条件时如何克服 ValueError?

qbittorrent在本地文件中没有有用的搜索插件怎么办

qBittorrent如何使用

当我试图运行路径分析时,如何克服R中MetaboAnalyst的问题?

尝试运行 jetpack compose 仪器测试时如何克服此构建错误