On Wed, Sep 19, 2012 at 6:13 PM, eryksun <eryk...@gmail.com> wrote: > > cmd = 'python remote.py "%s" "%s" "%s"' % (arg1, arg2, arg3) > > try: > out = subprocess.check_output(['ssh', '%s@%s' % (user, hostname), > cmd])
I forgot you need to escape special characters in the arguments. You can add quoting and escape special characters at the same time with the undocumented function pipes.quote: import pipes args = tuple(pipes.quote(arg) for arg in (arg1, arg2, arg3)) cmd = 'python test.py %s %s %s' % args Notice there are no longer quotes around each %s in cmd. Python 3.3 will have shlex.quote: http://docs.python.org/dev/library/shlex.html#shlex.quote Also, if you don't care about the output, use subprocess.check_call() instead. However, the connection still waits for the remote shell's stdout to close. If remote.py is long-running, redirect its stdout to a log file or /dev/null and start the process in the background (&). For example: cmd = 'python remote.py %s %s %s >/dev/null &' % args With this command remote.py is put in the background, stdout closes, the forked sshd daemon on the server exits, and ssh on the client immediately returns. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor