__all__ = ['robot_forking']
-import sys, os
+import os
+import sys
try:
import cPickle as pickle
# 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:
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
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))
error = check_subp.readPendingErrLine()
if not error:
break
- sys.stderr.write("(subp) " + error)
+ sys.stderr.write("(subp) %s" % error)
sys.stderr.flush()
except KeyboardInterrupt:
return 1
def stop(self):
- stop_subp(None) # Stop subprocess; do not log restarting
+ stop_subp(None) # Stop subprocess; do not log restarting