ganadist

proctool

Aug 26th, 2012
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.18 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import os, sys
  4.  
  5. def run_sudo():
  6.     if os.getuid() != 0:
  7.         sudo = 'sudo'
  8.         script = os.path.abspath(sys.argv[0])
  9.         cmd = [sudo, sys.executable, script] + sys.argv[1:]
  10.         os.execlp(sudo, *cmd)
  11.  
  12. def fromenv(args):
  13.     if len(args) != 2:
  14.         print 'Usage:', args[0], 'pid'
  15.         sys.exit(1)
  16.  
  17.     pid = args[1]
  18.  
  19.     SKIP_ENV=["PWD", "WINDOWID"]
  20.     filename = os.path.join(os.path.sep, 'proc', pid, 'environ')
  21.     env = open(filename).read()
  22.     env2 = []
  23.     for e in env.split(chr(0)):
  24.         if not '=' in e:
  25.             continue
  26.         k, v = e.split('=', 1)
  27.         if k in SKIP_ENV:
  28.             continue
  29.         env2.append(k + '="' + v + '"')
  30.  
  31.     print 'eval', ' '.join(env2)
  32.  
  33. def showcmd(args):
  34.     for pid in args[1:]:
  35.         filename = os.path.join(os.path.sep, 'proc', pid, 'cmdline')
  36.         if not os.access(filename, os.R_OK):
  37.             return
  38.         cmdline = open(filename).read()
  39.         print 'pid:', pid, 'command:', cmdline
  40.  
  41. if __name__ == '__main__':
  42.     run_sudo()
  43.     cmd = os.path.basename(sys.argv[0])
  44.     if cmd == 'proctool':
  45.         sys.argv = sys.argv[1:]
  46.         cmd = sys.argv[0]
  47.  
  48.     funcs = {
  49.         'fromenv': fromenv,
  50.         'showcmd': showcmd,
  51.     }
  52.     func = funcs.get(cmd)
  53.     if func:
  54.         func(sys.argv)
  55.     else:
  56.         print 'no such function:', cmd
Advertisement
Add Comment
Please, Sign In to add comment