"""
Forking robot
- Written by BroytMann. Copyright (C) 2000-2007 PhiloSoft Design
+ Written by Broytman. Copyright (C) 2000-2010 PhiloSoft Design.
"""
import sys, os
from subproc import Subprocess, RecordFile
+# This is to catch 'close failed: [Errno 9] Bad file descriptor' message
+# from os.close() in Subprocess.die() and errors from from the subprocess.
+sys.stderr = open("err.log", 'a')
check_subp = None
subp_pipe = None
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)
from bkmk_objects import Robot
class robot_forking(Robot):
- def check_url(self, bookmark, url_type, url_rest):
+ def check_url(self, bookmark):
if not check_subp:
restart_subp(self.log) # Not restart, just start afresh
try:
save_parent = bookmark.parent
bookmark.parent = None
-
- bookmark.tempfname = self.tempfname
subp_pipe.write_record(pickle.dumps(bookmark))
- if check_subp.waitForPendingChar(900): # wait 15 minutes
+ 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"):
+ "last_tested", "last_modified", "test_time",
+ "icon", "icon_href"):
if hasattr(new_b, attr):
setattr(bookmark, attr, getattr(new_b, attr))
else:
bookmark.parent = save_parent
+ while True:
+ error = check_subp.readPendingErrLine()
+ if not error:
+ break
+ sys.stderr.write("(subp) " + error)
+ sys.stderr.flush()
+
except KeyboardInterrupt:
return 0