0
curses
또는 urwid
과 같은 콘솔 GUI를 시작하는 대화 형 Python 스크립트로 stdout
을 인수하면, 루프를 닫은 후 몇 가지 조치를 취한 후 stdout
에 인쇄 된 경로에 어떻게 cd
을 쓸 수 있습니까? 예를 들어대화 형 Python 응용 프로그램의 stdout을 cd 명령 (서브 쉘?)
,
import sys
import urwid
def check_for_q(key):
if key in ('q', 'Q'):
raise urwid.ExitMainLoop()
txt = urwid.Text(u"Thanks for helping")
fill = urwid.Filler(txt, 'top')
loop = urwid.MainLoop(fill, unhandled_input=check_for_q)
loop.run()
sys.stdout.write('/usr/bin')
가 실행하고 q
또는 Q
을 눌러하면 urwid
루프 종료 : 이것은 단지 stdout
에 인쇄하는 간단한 파이썬 스크립트 인 경우
(py27) $ python curses_script.py
/usr/bin
(py27) $
을, 내가 할 수있는 cd $(python simple_script.py)
. 그러나 위의 경우, 파이썬 서브 쉘이 stdout
을 하이재킹하고 프로세스 입력을 실패 할 때 중단됩니다.
파일을 쓰지 않고도이 문제를 해결할 수 있습니까? 대신 일부 bash는 마술을하는
내가 전에 촬영 파이썬 스크립트를 감싸는 작은 bash는 스크립트를 생성하는 것입니다 한 접근 방법이다. bash 스크립트는 임시 파일이나 명명 된 파이프를 작성하고,이 파일의 경로를 명령 행 인수로 python 스크립트에 제공 한 다음, 파이썬 스크립트가 완료 될 때 파일을 읽고 삭제합니다. – jme
@jme 저는 임시 파일 생성에 의존하지 않고 나중에 삭제하는 것을 피합니다. 나는 이전에 명명 된 파이프를 사용 해본 적이 없으며, 그것들을 들여다 볼 것입니다. 예를 들어 설명하면 환상적입니다! – Kappers
왜 임시 파일을 만들지 않으시겠습니까? 이런 방식으로 파일을 사용하는 것은 유닉스 철학과 매우 일치한다. 또한 명명 된 파이프는 본질적으로 파일입니다 (이 사이트에서 사용하는 몇 가지 예가 있습니다). – jme