Michael Albinus <[email protected]> writes: > Dan Davison <[email protected]> writes: > >> I want to retrieve the contents of a file created by a shell process, >> which might be running remotely. My code (below) works, but I am trying >> to learn how to use tramp, and I think that this is not how it would be >> done by someone who knew what they were doing. > > What about > > (process-file "process" nil t) > >> If default-directory is not remote, then I want this to work for someone >> who does not have tramp installed (because aIui an XEmacs user might not >> have tramp?) > > It works also for a local `default-directory'. XEmacs comes with Tramp > 2.0, but it doesn't know `process-file' (yet). > >> In my case I *do* need to store the output in a file. I.e. although in >> the example above the output is created by redirecting stdout to file, >> in general the output of the remote process will not be on stdout (the >> output file will be created in some other way by the shell process). > > This case, I would do > > (defun retrieve-output () > (let ((tmpfile > (make-temp-file > (concat (file-remote-p default-directory) "/tmp/zzz-")))) > (unwind-protect > (progn > (process-file > "process" nil nil nil > (or (file-remote-p tmpfile 'localname) tmpfile)) > (insert-file-contents tmpfile)) > (delete-file tmpfile)))) > > (retrieve-output) > > I have added the local file name part of tmpfile to the `process-file' > call; it depends on the "process" command, where it does expect the > output file. > >> One thing that feels like a hack is the way that, when the process runs >> remotely, I manually convert the temp file path into a remote file path. > > `make-temp-file' works also wit a remote prefix, as you see. > >> Another problem is that with my code there is no guarantee that the temp >> file name doesn't already exist on the remote host. > > With this approach, `make-temp-file' does it for you.
Hi Michael, I'm having problems applying the above advice. Specifically, my problem is with make-temp-file: (make-temp-file "/yakuba:/tmp/tramp" t) ;; OK -- makes remote dir without error (make-temp-file "/yakuba:/tmp/tramp") (tramp-compat-make-temp-file "/yakuba:/tmp/tramp") ;; Both make local file in /tmp with error ;; Wrong type argument: number-or-marker-p, "" I'm confused that both these made a *local* temp file. The reason for the error seems to be as follows: ,---- | Both make-temp-file and tramp-compat-make-temp-file call write-region with START arg set to "" | From write-region: | | If start is a string, then output that string to the file | instead of any buffer contents; end is ignored. | | line 4431 tramp.el tramp-handle-write-region | | (> (- (or end (point-max)) (or start (point-min))) `---- Thanks very much for all your help so far. This is emacs 23.1.1 tramp 2.1.15 on ubuntu 9.10 Dan > >> Thanks a lot, >> >> Dan > > Best regards, Michael. _______________________________________________ Tramp-devel mailing list [email protected] http://lists.gnu.org/mailman/listinfo/tramp-devel
