Python uTorrent通知脚本不会终止

时间:2012-08-04 01:33:46

标签: python network-programming python-2.7 ubuntu-12.04 utorrent

我创建了一个小的python脚本,用于在ubuntu 12.04盒子上使用uTorrent下载torrent时发送通知。当我运行pgrep -l torrent时,我可以看到scipt的负载并且无法杀死它们。 utorrent调用脚本传递torrent名称。该脚本工作正常并从终端运行时退出,但在utorrent调用它时不会关闭。我尝试将sys.exit()添加到脚本的底部,但它没有停止进程并停止发送通知。

我可以做些什么来使scipt关闭?以及任何想法如何杀死这些过程?我试过杀死pkill和htop。

感谢。

#!/usr/bin/python

import sys
import os
import socket

def network_notify(message):
    host = ['192.168.0.4', '192.168.0.6']  #server IP
    port = 50000 
    size = 1024
    title = 'Torrent Downloaded'

    for i in host:
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
            s.connect((i,port))
        except:
            None
        else:
            s.send('\"' + title + '\" \"' +message+'"')
            data = s.recv(size) 
            s.close()

if len(sys.argv) > 1:
    name = ' '.join(sys.argv[1:])
    network_notify(name)

继承人pgrep

james@Netb$ pgrep -l torrent
27516 torrentNotify.p
27518 torrentNotify.p
27520 torrentNotify.p
27521 torrentNotify.p
27522 torrentNotify.p
27529 torrentNotify.p
27531 torrentNotify.p
27540 torrentNotify.p
27541 torrentNotify.p
27545 torrentNotify.p
27546 torrentNotify.p
27550 torrentNotify.p
27551 torrentNotify.p
27552 torrentNotify.p
27553 torrentNotify.p
27555 torrentNotify.p
27558 torrentNotify.p
27567 torrentNotify.p
27570 torrentNotify.p
27571 torrentNotify.p
27573 torrentNotify.p
27574 torrentNotify.p
28959 torrentNotify.p
28965 torrentNotify.p
28970 torrentNotify.p

1 个答案:

答案 0 :(得分:1)

尝试此操作,当您运行脚本时,请确保在调用脚本时执行/path/to/script.py >> debug.txt以进行utorrent调试保存。这应该可以为您提供更好的错误处理,并在完成后显式关闭套接字。我也添加了一个小超时。

我猜测套接字是挂在脚本的一部分中的。调用shutdown会停止所有流量,然后关闭将关闭套接字。

#!/usr/bin/python

import logging
import os
import socket
import sys

def network_notify(name):
    hosts = ['192.168.0.4', '192.168.0.6']  #server IP
    port = 50000 
    size = 1024
    title = 'Torrent Downloaded'

    for host in hosts:
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            # Set the socket to timeout after 10 seconds
            s.settimeout(10.0) 
            s.connect((host, port))
        except socket.error, socket.timeout:
            logging.error('Something is wrong with host: %s' % host)
            continue

        # Send the data
        s.sendall('"%s" "%s"' % (title, name))
        data = s.recv(size)

        # Shutdown and close the socket 
        s.shutdown(socket.SHUT_RDWR)
        s.close()

    if len(sys.argv) > 1:
        name = ' '.join(sys.argv[1:])
        network_notify(name)
    sys.exit()