【问题标题】:Elisp: call start-process with a path that includes a spaceElisp:使用包含空格的路径调用 start-process
【发布时间】:2012-03-23 14:42:30
【问题描述】:

我正在编写一个调用低级进程的模式。启动该过程的行是:

(setq grass-process (start-process "grass" "*grass*" "grass" "-text"
                           (concat  (file-name-as-directory 
                                    (cdr grass-location)) 
                           grass-mapset)))

grass-locationgrass-mapset 都是分别包含顶级目录和嵌套目录之一的路径的字符串,它们需要连接为set-process 的参数。

grass-locationgrass-mapset 包含没有空格的普通目录时,这可以正常工作。但是,如果目录名称中有空格,则在传递给start-process 时会被删除,从而产生以下错误:

grass-location
=> ("geobase Canada" . "/home/tws/grassdata/geobase Canada")
grass-mapset
=> "PERMANENT"

;; Calling start-process as above, the following error is produced
;; in the *grass* buffer:


Cleaning up temporary files ...
Starting GRASS ...
/home/tws/grassdata/geobaseCanada/PERMANENT: Not a valid GRASS location

Process grass exited abnormally with code 1

请注意,geobase Canada 已简化为 geobaseCanada。我已经尝试在concat 表达式中添加引号来保护该字符串,但它会产生更奇怪的错误,主目录被添加到参数前面。

如何将带有空格的路径名传递给启动进程?

【问题讨论】:

  • 您确定错误来自您的start-process 表达式,而不是来自grass 程序本身吗? (例如,第二个参数似乎连接到第一个参数;可能在此过程中丢失了空格...)
  • 你说得对,我从 xterm 启动草时遇到了同样的错误。谢谢!
  • @Francesco 你能把这个作为一个真正的答案,这样这个问题就不会被过滤为未回答吗?

标签: emacs elisp


【解决方案1】:

[正如 @event_jr 所建议的那样,我在这里重新发表我的评论作为答案,因为看起来这就是问题的根源]

您对start-process 的调用似乎是正确的;你确定问题不是来自grass 程序本身吗? (例如,第二个参数似乎连接到第一个参数;可能在此过程中丢失了空格...)

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2017-04-06
    相关资源
    最近更新 更多