0

저는 파이썬을 처음 접했습니다. 무한 루프에서 실행되도록 스크립트를 수정하려고합니다. 콘솔에서 파이썬 코드 행을 가져 와서 파이썬 코드 행을 실행합니다. 나는 간부() 함수를 사용하려고했습니다파이썬 명령을 가져오고 실행할 수있는 파이썬 스크립트를 작성하는 방법은 무엇입니까?

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> 

:

나는 다음과 같은 예를 할 수있는 일에 대해 이야기하고있다. 스크립트에서 정의한 함수를 실행하면 잘 작동하지만 실제로 어떤 이유로 든 모든 코드를 실행할 수는 없습니다. 나는 그 논리를 얻지 못한다. 알 겠어 :

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 
+0

지금까지 해본 코드 중 일부를 게시 할 수 있습니까? 나는이 두 라인'exec ('a = 2')로 문제가있는 범위를 얻습니다. print (a)' –

+0

안녕 카일, 질문에 추가했습니다. 감사! –

답변

2

것 같습니다 :

감사합니다,
구르


안녕하세요 카일, 여기

는 코드입니다. 일반적인 대화식 파이썬 인터프리터와 비슷하지만 미리 정의 된 몇 가지 함수가 있습니다. code 모듈을 통해이 작업을 수행 할 수 있습니다.

는 이제 하나의 미리 정의 된 함수 쉘을 만들어 보자 :

#!/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() 

(코드 this answer에서 도난 감사.)

는 지금, 그것을 실행하자,한다 우리?

$ 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 
+0

카스 텐 감사합니다! 그건 잘된거야! 사용자가 대화식 모드에서 일부 명령을 입력 한 후에 다른 명령을 실행할 수 있도록 스크립트의 무한 루프로 어떻게 복귀합니까? –

+1

발견 : CTRL-Z \t 고맙습니다! –

+0

@GurArie 예, Windows에서는 Ctrl + Z, 다른 곳에서는 Ctrl + D 여야합니다. 그러나'exit()'를 써서 쉘을 빠져 나가면이 방법이 작동하지 않는다는 것에주의하십시오. 그러면 프로그램이 끝납니다. – Carsten

관련 문제