From eb8cb39e8930b476e20bb8434e28a350e46ece34 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabi=C3=A1n=20Ezequiel=20Gallina?= Date: Sat, 19 Jul 2014 16:19:47 -0300 Subject: [PATCH] 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. --- lisp/ChangeLog | 6 ++++++ lisp/progmodes/python.el | 37 +++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2a1266a6031..437b2225ce1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2014-07-19 Fabián Ezequiel Gallina + + 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 Autodetect Python shell prompts. (Bug#17370) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index e49d5882a61..870640e4c55 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -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 -- 2.39.5