m...@pixar.com <m...@pixar.com> wrote: > I'm sure this is a FAQ, but I certainly haven't been able > to find an answer. > > Is it possible to set the program name as seen by the > operating system or lower-level libraries? > > I'm connecting to a database, and the runtime helpfully > sends some information to the server, such as username, > pid, and program name. > > Unfortunately, all my python programs get the name > '/usr/bin/python', and I would like to force that to > be the names of the individual scripts.
You can use this module http://code.google.com/p/procname/ Just for fun I made a pure python version using ctypes ------------------------------------------------------------ #!/usr/bin/python """ Attempt to set the process name with ctypes """ import os from subprocess import Popen, PIPE from ctypes import pythonapi, c_int, c_char_p, POINTER, addressof, pointer, CDLL, memmove, memset from ctypes.util import find_library Py_GetArgcArgv = pythonapi.Py_GetArgcArgv c_lib = CDLL(find_library("c")) PR_SET_NAME = 15 # linux specific argc_t = POINTER(c_char_p) Py_GetArgcArgv.restype = None Py_GetArgcArgv.argtypes = [POINTER(c_int), POINTER(argc_t)] def set_name(name): argv = c_int(0) argc = argc_t() Py_GetArgcArgv(argv, pointer(argc)) name0 = name+"\0" memset(argc.contents, 0, 256) # could do this better! memmove(argc.contents, name0, len(name0)) # prctl doesn't seem to be needed on linux? c_lib.prctl(PR_SET_NAME, name+"\0", 0, 0, 0) def ps(): print Popen(["ps", "v", str(os.getpid())], stdout=PIPE).communicate()[0] def main(): print "Before" ps() set_name("sausage") print "After" ps() if __name__ == "__main__": main() ------------------------------------------------------------ This prints $ ./procname.py Before PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 9159 pts/7 S+ 0:00 0 1000 5551 3404 0.1 /usr/bin/python ./procname.py After PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 9159 pts/7 S+ 0:00 0 1000 5551 3420 0.1 sausage -- Nick Craig-Wood <n...@craig-wood.com> -- http://www.craig-wood.com/nick -- http://mail.python.org/mailman/listinfo/python-list