Fix Python shell prompts detection for remote hosts.

* lisp/progmodes/python.el (python-shell-prompt-detect): Replace
call-process with process-file and make it more robust.
This commit is contained in:
Fabián Ezequiel Gallina 2014-07-19 16:19:47 -03:00
parent d949ade3c1
commit eb8cb39e89
2 changed files with 27 additions and 16 deletions

View file

@ -1,3 +1,9 @@
2014-07-19 Fabián Ezequiel Gallina <fgallina@gnu.org>
Fix Python shell prompts detection for remote hosts.
* progmodes/python.el (python-shell-prompt-detect): Replace
call-process with process-file and make it more robust.
2014-07-17 Fabián Ezequiel Gallina <fgallina@gnu.org>
Autodetect Python shell prompts. (Bug#17370)

View file

@ -1864,24 +1864,29 @@ detection and just returns nil."
(when python-shell-prompt-detect-enabled
(let* ((process-environment (python-shell-calculate-process-environment))
(exec-path (python-shell-calculate-exec-path))
(python-code-file
(python-shell--save-temp-file
(concat
"import sys\n"
"ps = [getattr(sys, 'ps%s' % i, '') for i in range(1,4)]\n"
;; JSON is built manually for compatibility
"ps_json = '\\n[\"%s\", \"%s\", \"%s\"]\\n' % tuple(ps)\n"
"print (ps_json)\n"
"sys.exit(0)\n")))
(code (concat
"import sys\n"
"ps = [getattr(sys, 'ps%s' % i, '') for i in range(1,4)]\n"
;; JSON is built manually for compatibility
"ps_json = '\\n[\"%s\", \"%s\", \"%s\"]\\n' % tuple(ps)\n"
"print (ps_json)\n"
"sys.exit(0)\n"))
(output
(with-temp-buffer
(call-process
(executable-find python-shell-interpreter)
python-code-file
'(t nil)
nil
python-shell-interpreter-interactive-arg)
(ignore-errors (delete-file python-code-file))
;; TODO: improve error handling by using
;; `condition-case' and displaying the error message to
;; the user in the no-prompts warning.
(ignore-errors
(let ((code-file (python-shell--save-temp-file code)))
;; Use `process-file' as it is remote-host friendly.
(process-file
(executable-find python-shell-interpreter)
code-file
'(t nil)
nil
python-shell-interpreter-interactive-arg)
;; Try to cleanup
(delete-file code-file)))
(buffer-string)))
(prompts
(catch 'prompts