기존 eshell 버퍼에 명령을 보내고 명령이 끝날 때까지 기다리고 다른 명령을 보내는 elisp 기능을 작성했습니다. 예를 들어, 내가 보내려 :eslip에서 eshell로 명령 보내기
python
2+3
를 지금까지 내가 실패, 다음을 시도 :
이 process-send-string
및 accept-process-output
사용하는 eshell 과정을 1.Getting :
(process-send-string eshell-proc "python")
(accept-process-output eshell-proc 100)
을하지만, 나는 eshell 프로세스를 얻을 수 없습니다. (get-buffer-process (current-buffer))
은 현재 버퍼가 eshell 인 경우 nil
을 반환합니다.
, 버퍼에 명령을 2.Inserting (eshell-send-input)
을 사용하고 다음 명령을 전송하기 전에 조금 자고 :
(progn
(insert "python")
(eshell-send-input)
(sleep-for 1)
(insert "2+3")
(eshell-send-input))
이 방법의 문제는 "+ 3 2"는 이전에 보내지는 것입니다 파이썬 하위 프로세스가 시작되었습니다. 이것은 내가 잠자고있는 시간에 관계없이 발생합니다. 잠자는 동안 이맥스의 모든 하위 프로세스가 정지 된 것 같습니다.
3.Using eshell-gather-process-output
: 내가 사용하는 경우 다음 중 하나를
(eshell-gather-process-output "/usr/bin/python" nil)
또는
내가 할(eshell-gather-process-output "/usr/bin/python" (list "somearg"))
Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
하지만 사용하는 경우 :
(eshell-gather-process-output "/usr/bin/python" (vector "somearg"))
내가 얻을 Debugger entered--Lisp error: (wrong-type-argument listp ["somearg"])
그래서 나는이 명령이 예상하는 인수의 유형에 관해서 정말로 혼란 스럽다. 이 명령의 사용 예를 한 번도 찾을 수 없었습니다.
왜 이렇게 간단한 것이 그렇게 복잡합니까? 어떤 입력을 주셔서 감사합니다
1 - eshell이 외부 프로세스를 시작하지 않으므로이 프로세스가 작동하지 않습니다. 보낼 프로세스가 없습니다. 2 나를 위해 작동합니다. – Tyler
2는 매우 약한 솔루션입니다. 시스템의로드에 따라 하위 프로세스를 시작하는 데 걸리는 시간이 달라집니다. 이 솔루션에서는 필자가 만날 것으로 예상되는 최대로드 시간을 하드 코딩하고 매번이 시간을 기다리는 것으로 제한됩니다.이것이 제가 대안을 원한다는 이유입니다. – erjoalgo