Server IP : 103.119.228.120 / Your IP : 3.145.62.36 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib64/python2.7/Demo/tkinter/guido/ |
Upload File : |
import os import sys import string from Tkinter import * from ScrolledText import ScrolledText from Dialog import Dialog import signal BUFSIZE = 512 class ShellWindow(ScrolledText): def __init__(self, master=None, shell=None, **cnf): if not shell: try: shell = os.environ['SHELL'] except KeyError: shell = '/bin/sh' shell = shell + ' -i' args = string.split(shell) shell = args[0] apply(ScrolledText.__init__, (self, master), cnf) self.pos = '1.0' self.bind('<Return>', self.inputhandler) self.bind('<Control-c>', self.sigint) self.bind('<Control-t>', self.sigterm) self.bind('<Control-k>', self.sigkill) self.bind('<Control-d>', self.sendeof) self.pid, self.fromchild, self.tochild = spawn(shell, args) self.tk.createfilehandler(self.fromchild, READABLE, self.outputhandler) def outputhandler(self, file, mask): data = os.read(file, BUFSIZE) if not data: self.tk.deletefilehandler(file) pid, sts = os.waitpid(self.pid, 0) print 'pid', pid, 'status', sts self.pid = None detail = sts>>8 cause = sts & 0xff if cause == 0: msg = "exit status %d" % detail else: msg = "killed by signal %d" % (cause & 0x7f) if cause & 0x80: msg = msg + " -- core dumped" Dialog(self.master, text=msg, title="Exit status", bitmap='warning', default=0, strings=('OK',)) return self.insert(END, data) self.pos = self.index("end - 1 char") self.yview_pickplace(END) def inputhandler(self, *args): if not self.pid: self.no_process() return "break" self.insert(END, "\n") line = self.get(self.pos, "end - 1 char") self.pos = self.index(END) os.write(self.tochild, line) return "break" def sendeof(self, *args): if not self.pid: self.no_process() return "break" os.close(self.tochild) return "break" def sendsig(self, sig): if not self.pid: self.no_process() return "break" os.kill(self.pid, sig) return "break" def sigint(self, *args): return self.sendsig(signal.SIGINT) def sigquit(self, *args): return self.sendsig(signal.SIGQUIT) def sigterm(self, *args): return self.sendsig(signal.SIGTERM) def sigkill(self, *args): return self.sendsig(signal.SIGKILL) def no_process(self): Dialog(self.master, text="No active process", title="No process", bitmap='error', default=0, strings=('OK',)) MAXFD = 100 # Max number of file descriptors (os.getdtablesize()???) def spawn(prog, args): p2cread, p2cwrite = os.pipe() c2pread, c2pwrite = os.pipe() pid = os.fork() if pid == 0: # Child for i in 0, 1, 2: try: os.close(i) except os.error: pass if os.dup(p2cread) <> 0: sys.stderr.write('popen2: bad read dup\n') if os.dup(c2pwrite) <> 1: sys.stderr.write('popen2: bad write dup\n') if os.dup(c2pwrite) <> 2: sys.stderr.write('popen2: bad write dup\n') os.closerange(3, MAXFD) try: os.execvp(prog, args) finally: sys.stderr.write('execvp failed\n') os._exit(1) os.close(p2cread) os.close(c2pwrite) return pid, c2pread, p2cwrite def test(): shell = string.join(sys.argv[1:]) root = Tk() root.minsize(1, 1) if shell: w = ShellWindow(root, shell=shell) else: w = ShellWindow(root) w.pack(expand=1, fill=BOTH) w.focus_set() w.tk.mainloop() if __name__ == '__main__': test()