我正在编写一个调用下级进程的模式。启动该进程的代码行为:
(setq grass-process (start-process "grass" "*grass*" "grass" "-text"
(concat (file-name-as-directory
(cdr grass-location))
grass-mapset)))grass-location和grass-mapset都是字符串,分别包含顶层目录和其中一个嵌套目录的路径,这两个目录需要作为set-process的参数连接起来。
当grass-location和grass-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?
发布于 2012-03-25 17:10:51
[按照@event_jr的建议,我在这里转发了我的评论作为答案,因为看起来这就是问题的根源]
您对start-process的调用似乎是正确的;您确定问题不是来自grass程序本身吗?(例如,第二个参数似乎与第一个参数连接在一起;可能在此过程中丢失了空格……)
https://stackoverflow.com/questions/9841196
复制相似问题