Subject: bug#50057: 27.2; Issue evaluating Python code across machines

From: Augusto Stoffel <[email-masked]>
Date: Sat, 14 Aug 2021 18:01:28 +0200

Suppose the current buffer is editing a local file and you would like to
evaluate some code on a Python inferior running in a remote machine.
The following should work:

(let ((default-directory "/ssh:some-remote-machine:/"))
  (run-python))

(python-shell-send-string "5+5")

(python-shell-send-string "(5\n+5)")

The first python-shell-send-string call indeed works.  The second one
produces an error, because a temporary file is created in the local
machine instead of the remote one.  The same kind of error happens if
one tries to evaluate the region on the entire buffer.

I've attached a small patch to fix this.

>From b3f47f99da7b8ac2221b6bbafc85ae8076f92703 Mon Sep 17 00:00:00 2001
From: Augusto Stoffel <[email-masked]>
Date: Sat, 14 Aug 2021 17:48:45 +0200
Subject: [PATCH] Allow evaluating Python code across machines

* python.el (python-shell-send-string): Ensure that the temporary file
is created in the host running the Python process.
---
 lisp/progmodes/python.el | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 2557704e40..20299c20d2 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -3085,7 +3085,8 @@ python-shell-send-string
    (list (read-string "Python command: ") nil t))
   (let ((process (or process (python-shell-get-process-or-error msg))))
     (if (string-match ".\n+." string)   ;Multiline.
-        (let* ((temp-file-name (python-shell--save-temp-file string))
+        (let* ((temp-file-name (with-current-buffer (process-buffer process)
+                                 (python-shell--save-temp-file string)))
                (file-name (or (buffer-file-name) temp-file-name)))
           (python-shell-send-file file-name process temp-file-name t))
       (comint-send-string process string)
-- 
2.31.1