X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=Robots%2Fbkmk_rforking.py;h=7b458df0ca8767cba61c3c1b76a3d8d5579b03f3;hb=3b51e43f06c97c0d1a2ffbb1c29276acaeb64f07;hp=4d3e105a7a4063f7f5f5395d88d1ff18c1fa4601;hpb=a5a3a03d6067edaae395c8d5386257b55f3850f3;p=bookmarks_db.git diff --git a/Robots/bkmk_rforking.py b/Robots/bkmk_rforking.py index 4d3e105..7b458df 100644 --- a/Robots/bkmk_rforking.py +++ b/Robots/bkmk_rforking.py @@ -10,7 +10,8 @@ __license__ = "GNU GPL" __all__ = ['robot_forking'] -import sys, os +import os +import sys try: import cPickle as pickle @@ -23,11 +24,12 @@ from bkmk_objects import Robot # This is to catch 'close failed: [Errno 9] Bad file descriptor' message # from os.close() in Subprocess.die() and errors from the subprocess. -sys.stderr = open("err.log", 'a') +sys.stderr = open("err.log", 'at') check_subp = None subp_pipe = None + def stop_subp(log): global check_subp, subp_pipe if check_subp: @@ -35,19 +37,22 @@ def stop_subp(log): del check_subp del subp_pipe + def restart_subp(log): global check_subp, subp_pipe stop_subp(log) - check_subp = Subprocess("%s/Robots/bkmk_rforking_sub.py" % os.path.dirname(sys.argv[0]), + check_subp = Subprocess("%s/Robots/bkmk_rforking_sub.py" + % os.path.dirname(sys.argv[0]), control_stderr=True) subp_pipe = RecordFile(check_subp) _set_subproc = True + class robot_forking(Robot): - subproc = 'urllib2' # Default subprocess + subproc = 'urllib' # Default subprocess def check_url(self, bookmark): global _set_subproc @@ -58,26 +63,30 @@ class robot_forking(Robot): subproc_attrs = [] for attr in dir(self): if attr.startswith('subproc_'): - subproc_attrs.append((attr[len('subproc_'):], getattr(self, attr))) + subproc_attrs.append( + (attr[len('subproc_'):], getattr(self, attr)) + ) if subproc_attrs: - subproc += ':' + ':'.join(['='.join((k,v)) for k,v in subproc_attrs]) + subproc += ':' + ':'.join( + ['='.join((k, v)) for k, v in subproc_attrs] + ) os.environ['BKMK_ROBOT'] = subproc if not check_subp: - restart_subp(self.log) # Not restart, just start afresh + restart_subp(self.log) # Not restart, just start afresh try: save_parent = bookmark.parent bookmark.parent = None subp_pipe.write_record(pickle.dumps(bookmark)) - if check_subp.waitForPendingChar(60): # wait a minute + if check_subp.waitForPendingChar(60): # wait a minute new_b = pickle.loads(subp_pipe.read_record()) for attr in ( "error", "no_error", "moved", "size", "md5", "real_title", "last_tested", "last_modified", "test_time", - "icon", "icon_href", + "icon", "icon_href", "charset", ): if hasattr(new_b, attr): setattr(bookmark, attr, getattr(new_b, attr)) @@ -91,7 +100,7 @@ class robot_forking(Robot): error = check_subp.readPendingErrLine() if not error: break - sys.stderr.write("(subp) " + error) + sys.stderr.write("(subp) %s" % error) sys.stderr.flush() except KeyboardInterrupt: @@ -101,4 +110,4 @@ class robot_forking(Robot): return 1 def stop(self): - stop_subp(None) # Stop subprocess; do not log restarting + stop_subp(None) # Stop subprocess; do not log restarting