2013-11-04 2 views
3

백그라운드에서 대화 형 Python 콘솔을 시작할 때 이상한 문제가 발생했습니다. 백그라운드에서 인터프리터를 다시 시작한 후에는 입력 한 텍스트가 표시되지 않습니다 (즉, >>> 프롬프트가 표시되지만, 무엇이든 해석 할 수 있습니다.) [enter]를 누르면 같은 >>> 프롬프트가 나타납니다. 선).백그라운드에서 대화 형 Python 인터프리터를 실행하십시오.

문제를 재현하는 쉬운 방법은 입력 그냥 :

python & 
fg 

이 문제는 포 그라운드에서 프로그램을 시작하면, 발생 배경에 넣어 전경으로 반환하지 않습니다 않습니다 :

내가 같이있다 : 당신은 백그라운드에서 대화 형 인터프리터를 시작하려는 이유는

python 
[ctrl-z] 
bg 
fg 

을 궁금해하는 경우, 다음과 같은 경우를 생각해 볼 실행에 오랜 시간이 걸리는 모방이지만 끝나면 결과와 상호 작용하고 싶습니다. 따라서, 나는 프로그램을 시작 :

python -i simulation.py & 
fg #(after it's finished running) 

쉬운 솔루션은 전경를 시작 배경으로 이동 한 다음 나중에 포 그라운드로 가져옵니다 불과하지만, 이런 일이 발생하는 이유 난 그냥 궁금하네요 .

+0

당신이'readline' 모듈이 설치되어 있습니까? GNU'libreadline' 대신 BSD'libedit'에 대해 빌드 된 동안'readline'과 유사한 동작을 보았습니다. 꽤 몇 년 동안 아니지만 ... 어떤 배포판/버전, 어떤 파이썬 버전, 그리고 우리가 그것에있는 동안 어떤 셸 및 터미널 프로그램 및 버전? – abarnert

+0

또한,'simulation.py'는'termios','tty','curses' 또는 그와 비슷한 것을하거나 터미널에 바이너리 데이터를 씁니까? – abarnert

+0

우분투 13.04, 파이썬 2.7, 배시를 사용하고 있습니다. 스크립트는 여러분이 나열한 것들을하지 않지만, 스크립트 (파이썬 &) 없이도 문제를 재현 할 수 있기 때문에 관련성이 있는지 확신 할 수 없습니다. – sheridp

답변

2

포 그라운드로 통역을 데리고 한 후 터미널 ECHO 모드를 강제로 다음 명령을 실행 생각해

import termios 
attr = termios.tcgetattr(1) 
attr[3] = attr[3] | termios.ECHO 
termios.tcsetattr(1, termios.TCSANOW, attr) 
+0

터미널 ECHO 속성이 설정되지 않은 이유는 무엇입니까? – sheridp

+0

기본적으로 솔루션과 동일합니다. import os; os.system ('reset') 또는 os.system ('stty sane'). 여전히 로컬 에코가 비활성화 된 이유는 확실하지 않습니다. 또한 재미 있고, 인터프리터 외부에서 리셋 또는 stty sane을 실행하면 (bg의 파이썬 사용) 문제가 해결되지 않습니다. – sheridp

관련 문제