2010-06-03 2 views

Répondre

2

Il suffit de lier la variable default-directory avant la ponte de votre processus. Exemple:

(let ((default-directory "/tmp/")) 
    (call-process "/bin/bash" nil "*scratch*" nil "-c" "echo working dir is $PWD")) 

J'ai couru ce tampon de mon *scratch* et la chaîne working dir is /tmp a été ajouté au tampon.

2

Voulez-vous dire comme ça?

Cela montre les variables d'environnement par défaut:

(shell-command "env") 

et cela montre comment vous pouvez les changer sur une base par processus:

(shell-command "PWD=/tmp env") 
2

$PWD est une variable d'environnement qui reflète le répertoire de travail en cours, pas celui qui le contrôle. Selon la section Processes du Elisp manual, le répertoire par défaut pour un processus engendré est déterminé par la valeur default-directory. L'environnement du processus généré est le même que celui de la session Emacs, que vous pouvez modifier avec setenv. Vous pouvez également spécifier des variables d'environnement qui sont utilisées uniquement pour les processus engendrés via la variable process-environment.

2

Pour ce que ça vaut, pour obtenir des sous-processus python pour se comporter de la manière que je voulais (apparemment penser complètement qu'ils étaient dans le répertoire spécifié) que je devais faire:

(let* ((default-directory (find-correct-dir)) 
     (process-environment (cons (format "PWD=%s" default-directory) 
            process-environment))) 
    (do-the-subprocess-thing)) 

Ou, si je voulais jeter le reste de l'environnement:

(let* ((default-directory (find-correct-dir)) 
     (process-environment (list (format "PWD=%s" default-directory)))) 
    (do-the-subprocess-thing)) 

qui est, je devais définir à la foisdefault-directory et process-environment, et à la même valeur.