Files
@ 02ea4fed2520
Branch filter:
Location: Morevna/src/util.py - annotation
02ea4fed2520
1.2 KiB
text/x-python
fixes, error handling
259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 259f29140f23 9f2b0a4f3538 9f2b0a4f3538 9f2b0a4f3538 9f2b0a4f3538 9f2b0a4f3538 9f2b0a4f3538 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 13d0327a4abb 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc 4b88aca70fbc | import os
import sys
def spawnDaemon(fun):
# do the UNIX double-fork magic, see Stevens' "Advanced
# Programming in the UNIX Environment" for details (ISBN 0201563177)
try:
pid = os.fork()
if pid > 0:
# parent process, return and keep running
return
except OSError as e:
print("fork #1 failed: {0} ({1})".format(e.errno,e.strerror),file=sys.stderr)
sys.exit(1)
os.setsid()
# do second fork
try:
pid = os.fork()
if pid > 0:
# exit from second parent
print("[{0}] server running".format(pid))
sys.exit(0)
except OSError as e:
print("fork #2 failed: {0} ({1})".format(e.errno,e.strerror),file=sys.stderr)
sys.exit(1)
fun()
# all done
os._exit(os.EX_OK)
def splitHost(host,defaultPort=0):
address,_,port=host.partition(":")
if not port: port=defaultPort
return (address,port)
class Progress:
def __init__(self,n,i0=0):
self._n=n
self._i0=i0
self._i=i0
self._last=""
def p(self,i):
i0=self._i0
n=self._n
assert i0<=i<n or n<i<=i0, (i0,i,n)
percentage=Progress._p(i,n,i0)
res="{0}%".format(percentage)
if res!=self._last:
print(res,end="\r")
self._last=res
def done(self):
print("100%")
@staticmethod
def _p(i,n,i0):
_1=1 if n>=i0 else -1
return 100*(i+_1-i0)//(n-i0)
|