コード例 #1
0
ファイル: systemshell.py プロジェクト: jromang/retina-old
 def transcode(self, bytes):
     if os.name == 'nt':
         return encoding.transcode(str(bytes.data()), 'cp850')
     else:
         return ExternalShellBase.transcode(self, bytes)
コード例 #2
0
ファイル: interactiveshell.py プロジェクト: vipmath/luminoso
 def run_command(self, cmd, history=True, new_prompt=True):
     """Run command in interpreter"""
     
     # Before running command
     self.emit(SIGNAL("status(QString)"), self.tr('Busy...'))
     self.emit(SIGNAL("executing_command(bool)"), True)
     
     if not cmd:
         cmd = ''
     else:
         if history:
             self.add_to_history(cmd)
             
     wd_before = os.getcwdu()
             
     # -- Special commands type I
     #    (transformed into commands executed in the interpreter)
     # ? command
     special_pattern = r"^%s (?:r\')?(?:u\')?\"?\'?([a-zA-Z0-9_\.]+)"
     run_match = re.match(special_pattern % 'run', cmd)
     help_match = re.match(r'^([a-zA-Z0-9_\.]+)\?$', cmd)
     if help_match:
         cmd = 'help(%s)' % help_match.group(1)
     # run command
     elif run_match:
         filename = guess_filename(run_match.groups()[0])
         cmd = 'execfile(r"%s")' % filename
     # -- End of Special commands type I
         
     # -- Special commands type II
     #    (don't need code execution in interpreter)
     xedit_match = re.match(special_pattern % 'xedit', cmd)
     edit_match = re.match(special_pattern % 'edit', cmd)
     clear_match = re.match(r"^clear ([a-zA-Z0-9_, ]+)", cmd)
     # (external) edit command
     if xedit_match:
         filename = guess_filename(xedit_match.groups()[0])
         self.external_editor(filename)
     # local edit command
     elif edit_match:
         filename = guess_filename(edit_match.groups()[0])
         if osp.isfile(filename):
             self.parent().edit_script(filename)
         else:
             self.write_error("No such file or directory: %s\n" % filename)
     # remove reference (equivalent to MATLAB's clear command)
     elif clear_match:
         varnames = clear_match.groups()[0].replace(' ', '').split(',')
         for varname in varnames:
             try:
                 self.interpreter.namespace.pop(varname)
             except KeyError:
                 pass
     # Execute command
     elif cmd.startswith('!'):
         # System ! command
         pipe = Popen(cmd[1:], shell=True,
                      stdin=PIPE, stderr=PIPE, stdout=PIPE)
         txt_out = encoding.transcode( pipe.stdout.read() )
         txt_err = encoding.transcode( pipe.stderr.read().rstrip() )
         if txt_err:
             self.write_error(txt_err)
         if txt_out:
             self.write(txt_out)
         self.write('\n')
         self.more = False
     # -- End of Special commands type II
     else:
         # Command executed in the interpreter
         self.more = self.interpreter.push(cmd)
     
     self.emit(SIGNAL("refresh()"))
     if os.getcwdu() != wd_before:
         # Force the explorer widget to change its current directory:
         self.emit(SIGNAL("refresh_explorer()"))
     # Refresh current directory contents in explorer widget:
     self.emit(SIGNAL("refresh_explorer(QString)"), os.getcwdu())
     if new_prompt:
         self.new_prompt(self.p2 if self.more else self.p1)
     if not self.more:
         self.interpreter.resetbuffer()
         
     # After running command
     self.emit(SIGNAL("executing_command(bool)"), False)
     self.emit(SIGNAL("status(QString)"), QString())
コード例 #3
0
ファイル: interpreter.py プロジェクト: ImadBouirmane/spyder
    def run_command(self, cmd, new_prompt=True):
        """Run command in interpreter"""
        if cmd == 'exit()':
            self.exit_flag = True
            self.write('\n')
            return
        # -- Special commands type I
        #    (transformed into commands executed in the interpreter)
        # ? command
        special_pattern = r"^%s (?:r\')?(?:u\')?\"?\'?([a-zA-Z0-9_\.]+)"
        run_match = re.match(special_pattern % 'run', cmd)
        help_match = re.match(r'^([a-zA-Z0-9_\.]+)\?$', cmd)
        cd_match = re.match(r"^\!cd \"?\'?([a-zA-Z0-9_ \.]+)", cmd)
        if help_match:
            cmd = 'help(%s)' % help_match.group(1)
        # run command
        elif run_match:
            filename = guess_filename(run_match.groups()[0])
            cmd = "runfile('%s', args=None)" % remove_backslashes(filename)
        # !cd system command
        elif cd_match:
            cmd = 'import os; os.chdir(r"%s")' % cd_match.groups()[0].strip()
        # -- End of Special commands type I
            
        # -- Special commands type II
        #    (don't need code execution in interpreter)
        xedit_match = re.match(special_pattern % 'xedit', cmd)
        edit_match = re.match(special_pattern % 'edit', cmd)
        clear_match = re.match(r"^clear ([a-zA-Z0-9_, ]+)", cmd)
        # (external) edit command
        if xedit_match:
            filename = guess_filename(xedit_match.groups()[0])
            self.widget_proxy.edit(filename, external_editor=True)
        # local edit command
        elif edit_match:
            filename = guess_filename(edit_match.groups()[0])
            if osp.isfile(filename):
                self.widget_proxy.edit(filename)
            else:
                self.stderr_write.write(
                                "No such file or directory: %s\n" % filename)
        # remove reference (equivalent to MATLAB's clear command)
        elif clear_match:
            varnames = clear_match.groups()[0].replace(' ', '').split(',')
            for varname in varnames:
                try:
                    self.namespace.pop(varname)
                except KeyError:
                    pass
        # Execute command
        elif cmd.startswith('!'):
            # System ! command
            pipe = Popen(cmd[1:], shell=True,
                         stdin=PIPE, stderr=PIPE, stdout=PIPE)
            txt_out = encoding.transcode( pipe.stdout.read().decode() )
            txt_err = encoding.transcode( pipe.stderr.read().decode().rstrip() )
            if txt_err:
                self.stderr_write.write(txt_err)
            if txt_out:
                self.stdout_write.write(txt_out)
            self.stdout_write.write('\n')
            self.more = False
        # -- End of Special commands type II
        else:
            # Command executed in the interpreter
#            self.widget_proxy.set_readonly(True)
            self.more = self.push(cmd)
#            self.widget_proxy.set_readonly(False)
        
        if new_prompt:
            self.widget_proxy.new_prompt(self.p2 if self.more else self.p1)
        if not self.more:
            self.resetbuffer()
コード例 #4
0
 def transcode(self, bytes):
     if os.name == 'nt':
         return encoding.transcode(str(bytes.data()), 'cp850')
     else:
         return ExternalShellBase.transcode(self, bytes)
コード例 #5
0
ファイル: interpreter.py プロジェクト: s-tazawa/crispy
    def run_command(self, cmd, new_prompt=True):
        """Run command in interpreter"""
        if cmd == 'exit()':
            self.exit_flag = True
            self.write('\n')
            return
        # -- Special commands type I
        #    (transformed into commands executed in the interpreter)
        # ? command
        special_pattern = r"^%s (?:r\')?(?:u\')?\"?\'?([a-zA-Z0-9_\.]+)"
        run_match = re.match(special_pattern % 'run', cmd)
        help_match = re.match(r'^([a-zA-Z0-9_\.]+)\?$', cmd)
        cd_match = re.match(r"^\!cd \"?\'?([a-zA-Z0-9_ \.]+)", cmd)
        if help_match:
            cmd = 'help(%s)' % help_match.group(1)
        # run command
        elif run_match:
            filename = guess_filename(run_match.groups()[0])
            cmd = "runfile('%s', args=None)" % remove_backslashes(filename)
        # !cd system command
        elif cd_match:
            cmd = 'import os; os.chdir(r"%s")' % cd_match.groups()[0].strip()
        # -- End of Special commands type I

        # -- Special commands type II
        #    (don't need code execution in interpreter)
        xedit_match = re.match(special_pattern % 'xedit', cmd)
        edit_match = re.match(special_pattern % 'edit', cmd)
        clear_match = re.match(r"^clear ([a-zA-Z0-9_, ]+)", cmd)
        # (external) edit command
        if xedit_match:
            filename = guess_filename(xedit_match.groups()[0])
            self.widget_proxy.edit(filename, external_editor=True)
        # local edit command
        elif edit_match:
            filename = guess_filename(edit_match.groups()[0])
            if osp.isfile(filename):
                self.widget_proxy.edit(filename)
            else:
                self.stderr_write.write("No such file or directory: %s\n" %
                                        filename)
        # remove reference (equivalent to MATLAB's clear command)
        elif clear_match:
            varnames = clear_match.groups()[0].replace(' ', '').split(',')
            for varname in varnames:
                try:
                    self.namespace.pop(varname)
                except KeyError:
                    pass
        # Execute command
        elif cmd.startswith('!'):
            # System ! command
            pipe = programs.run_shell_command(cmd[1:])
            txt_out = encoding.transcode(pipe.stdout.read().decode())
            txt_err = encoding.transcode(pipe.stderr.read().decode().rstrip())
            if txt_err:
                self.stderr_write.write(txt_err)
            if txt_out:
                self.stdout_write.write(txt_out)
            self.stdout_write.write('\n')
            self.more = False
        # -- End of Special commands type II
        else:
            # Command executed in the interpreter
            #            self.widget_proxy.set_readonly(True)
            self.more = self.push(cmd)
#            self.widget_proxy.set_readonly(False)

        if new_prompt:
            self.widget_proxy.new_prompt(self.p2 if self.more else self.p1)
        if not self.more:
            self.resetbuffer()