我有一个使用pdftk压缩我的pdf文件的功能:
(defun compresspdf (filename)
(interactive)
(let ((tmpfile (concat filename "~")))
(start-process-shell-command "pdftk" nil
(format "pdftk %s cat output %s compress dont_ask"
filename tmpfile))
(rename-file tmpfile filename t)))
它压缩文件并将其保存为附加~
的相同名称。但是,在它应该重命名文件的时候,它给了我一个错误:
let: Renaming: No such file or directory, /pathtofile/mypdf.pdf~, /pathtofile/mypdf.pdf
,但很明显,这两个文件都存在。之后我可以单独评估重命名文件,它工作正常。也许它试图在~
文件实际创建之前重命名?在这种情况下,我怎样才能让它等到过程结束? (并可能检查错误?)
答案 0 :(得分:3)
与使用仅生成进程的'start-process-shell-command
相反,因此重命名发生在创建tmpfile
之前。尝试使用'shell-command
,如下所示:
(defun compresspdf (filename)
(interactive)
(let ((tmpfile (concat filename "~")))
(with-temp-buffer
(shell-command (format "pdftk %s cat output %s compress dont_ask"
filename tmpfile)
(current-buffer)
(current-buffer)))
(rename-file tmpfile filename t)))
对'shell-command
的调用将在完成此过程后完成(压缩完成)。