0

私はPythonにかなり慣れていません。スクリプトを変更して、無限ループで実行し、コンソールから Python コード行を取得し、Python コード行を実行しようとしています。

私は次の例を実行できる何かについて話している:

Shell> myconsole.py  
> PredefindFunction ("Hello")  
This is the result of the PredefinedFunction: Hello!!!  
> a=1  
> if a==1:  
>     print "a=1"  
a=1  
> quit  
Shell>  

exec() 関数を使用してみました。スクリプトで定義した関数を実行すると問題なく動作しますが、何らかの理由ですべてのコードを実際に実行することはできません。私はその論理を理解していません。私は得る:

Shell> myconsole.py  
> PredefindFunction ("Hello")  
This is the result of the PredefinedFunction: Hello!!!  
> a=1  
> print a 
...
NameError: name 'a' is not defined  
Shell>  

誰でも助けてもらえますか?

ありがとう、
グル


こんにちは、カイルです。

コードは次のとおりです。

class cParseTermCmd:  
    def __init__(self, line = ""):  
        self.TermPrompt = "t>"  
        self.oTermPrompt = re.compile("t>", re.IGNORECASE)  
        self.TermCmdLine = ""  
        self.line = line  

    # Check if the TermPrompt (t>) exist in line
    def mIsTermCmd (self):
        return self.oTermPrompt.match(self.line)

    # Remove the term prompt from the terminal command line  
    def mParseTermCmd (self):  
        self.TermCmdLine = re.sub(r'%s'%self.TermPrompt, '', self.line, flags=re.IGNORECASE)  
        exec (self.TermCmdLine)  


And I call it in an infinite while loop from:  
def GetCmd (self):  
            line = raw_input('>')  
            self.TermCmdLine = cParseTermCmd(line)  
            if self.TermCmdLine.mIsTermCmd():  
                # Execute terminal command  
                self.TermCmdLine.mParseTermCmd()  
            else:  
                return line  
4

1 に答える 1

3

カスタム Python シェルを構築しようとしているようです。通常のインタラクティブな Python インタープリターと同様ですが、いくつかの定義済み関数があります。コードモジュールはそれを行うことができます。

単一の定義済み関数を持つシェルを作成しましょう。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import readline  # not really required, but allows you to
                 # navigate with your arrow keys
import code


def predefined_function():
    return "whoop!"

vars = globals().copy()
vars.update(locals())
shell = code.InteractiveConsole(vars)
shell.interact()

(この回答からありがたいことにコードを盗みました。)

では、実行してみましょうか。

$ python pyshell.py
Python 2.7.5 |Anaconda 1.8.0 (64-bit)| (default, Jul  1 2013, 12:37:52) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> predefined_function()
'whoop!'
>>> a = 1
>>> print (a + 1)
2
于 2014-02-13T07:17:41.923 に答える