mpdlistjobs.py
来自「刚才是说明 现在是安装程序在 LINUX环境下进行编程的MPICH安装文件」· Python 代码 · 共 106 行
PY
106 行
#!/usr/bin/env pythonfrom sys import argv, exitfrom os import environ, getuid, closefrom socket import socket, fromfd, AF_UNIX, SOCK_STREAMfrom re import subfrom signal import signal, SIG_DFL, SIGINT, SIGTSTP, SIGCONTfrom mpdlib import mpd_set_my_id, mpd_send_one_msg, mpd_recv_one_msg, \ mpd_get_my_username, mpd_raise, mpdErrordef mpdlistjobs(): mpd_set_my_id('mpdlistjobs_') username = mpd_get_my_username() uname = '' jobid = '' sjobid = '' jobalias = '' if len(argv) > 1: aidx = 1 while aidx < len(argv): if argv[aidx] == '-h' or argv[aidx] == '--help': print 'usage: mpdlistjobs [-u | --user username] [-a | --alias jobalias] ', print '[-j | --jobid jobid]' print ' (only use one of jobalias or jobid)' print 'lists jobs being run by an mpd ring, all by default, or filtered' print 'by user, mpd job id, or alias assigned when the job was submitted' exit(-1) if argv[aidx] == '-u' or argv[aidx] == '--user': uname = argv[aidx+1] aidx += 2 elif argv[aidx] == '-j' or argv[aidx] == '--jobid': jobid = argv[aidx+1] aidx += 2 sjobid = jobid.split('@') # jobnum and originating host elif argv[aidx] == '-a' or argv[aidx] == '--alias': jobalias = argv[aidx+1] aidx += 2 else: print 'unrecognized arg: %s' % argv[aidx] exit(-1) if environ.has_key('UNIX_SOCKET'): conFD = int(environ['UNIX_SOCKET']) conSocket = fromfd(conFD,AF_UNIX,SOCK_STREAM) close(conFD) else: consoleName = '/tmp/mpd2.console_' + username conSocket = socket(AF_UNIX,SOCK_STREAM) # note: UNIX socket try: conSocket.connect(consoleName) except Exception, errmsg: mpd_raise('cannot connect to local mpd') # mpd_raise('cannot connect to local mpd; errmsg: %s' % (str(errmsg)) ) msgToSend = { 'cmd' : 'mpdlistjobs' } mpd_send_one_msg(conSocket,msgToSend) msg = mpd_recv_one_msg(conSocket) if msg['cmd'] != 'local_mpdid': # get full id of local mpd for filters later mpd_raise('did not recv local_mpdid msg from local mpd; instead, recvd: %s' % msg) else: if len(sjobid) == 1: sjobid.append(msg['id']) while 1: msg = mpd_recv_one_msg(conSocket) if not msg.has_key('cmd'): raise RuntimeError, 'mpdlistjobs: INVALID msg=:%s:' % (msg) if msg['cmd'] == 'mpdlistjobs_info': smjobid = msg['jobid'].split(' ') # jobnum, mpdid, and alias (if present) if len(smjobid) < 3: smjobid.append('') print_based_on_uname = 0 # default print_based_on_jobid = 0 # default print_based_on_jobalias = 0 # default if not uname or uname == msg['username']: print_based_on_uname = 1 if not jobid and not jobalias: print_based_on_jobid = 1 print_based_on_jobalias = 1 else: if sjobid and sjobid[0] == smjobid[0] and sjobid[1] == smjobid[1]: print_based_on_jobid = 1 if jobalias and jobalias == smjobid[2]: print_based_on_jobalias = 1 if not smjobid[2]: smjobid[2] = ' ' # just for printing if print_based_on_uname and (print_based_on_jobid or print_based_on_jobalias): print 'jobid = %s@%s' % (smjobid[0],smjobid[1]) print 'jobalias = %s' % (smjobid[2]) print 'username = %s' % (msg['username']) print 'host = %s' % (msg['host']) print 'pid = %s' % (msg['pid']) print 'rank = %s' % (msg['rank']) print 'pgm = %s' % (msg['pgm']) print else: break # mpdlistjobs_trailerdef sigint_handler(signum,frame): exit(-1)if __name__ == '__main__': signal(SIGINT,sigint_handler) try: mpdlistjobs() except mpdError, errmsg: print 'mpdlistjobs failed: %s' % (errmsg)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?