]> arthur.barton.de Git - bup.git/blobdiff - lib/bup/ssh.py
Minimize use of preexec_fn
[bup.git] / lib / bup / ssh.py
index 97ab3121a7177b9a0e0f24f4b39e795767e9fe8f..5602921b2d77e32152fc5a21b594d4ee381973c9 100644 (file)
@@ -2,7 +2,7 @@
 Connect to a remote host via SSH and execute a command on the host.
 """
 
-from __future__ import absolute_import
+from __future__ import absolute_import, print_function
 import sys, os, re, subprocess
 from bup import helpers, path
 
@@ -34,12 +34,21 @@ def connect(rhost, port, subcmd, stderr=None):
             argv.extend(('-p', port))
         argv.extend((rhost, '--', cmd.strip()))
         #helpers.log('argv is: %r\n' % argv)
-    def setup():
-        # runs in the child process
-        if not rhost:
-            os.environ['PATH'] = ':'.join([nicedir,
-                                           os.environ.get('PATH', '')])
-        os.setsid()
-    return subprocess.Popen(argv, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-                            stderr=stderr,
-                            preexec_fn=setup)
+    if rhost:
+        env = os.environ
+    else:
+        envpath = os.environ.get('PATH')
+        env = os.environ.copy()
+        env['PATH'] = nicedir if not envpath else nicedir + ':' + envpath
+    if sys.version_info[0] < 3:
+        return subprocess.Popen(argv,
+                                stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+                                stderr=stderr,
+                                env=env,
+                                preexec_fn=lambda: os.setsid())
+    else:
+        return subprocess.Popen(argv,
+                                stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+                                stderr=stderr,
+                                env=env,
+                                start_new_session=True)