Изменить каталог в терминале с помощью Python

Я пишу простой сценарий, чтобы изменить текущий рабочий каталог на другой каталог. Следующий скрипт работает нормально, пока программа не завершится, после чего я вернусь в свой домашний каталог.

#!/usr/bin/python

import os

if __name__ == '__main__':
    os.chdir("/home/name/projects/python")
    os.system("pwd")
    print 'dir changed'

Выход:

bash:~$ python chdir.py
/home/name/projects/python
dir changed
bash:~$ pwd
/home/name

Я хочу, чтобы изменение каталога сохранялось даже после выхода из программы. Есть идеи как это сделать?

Изменить: что я действительно хочу сделать, это: я часто использую этот каталог, а не делать cd <path> каждый раз, когда я открываю терминал, я просто пишу ./progname и это меняет каталог.

3 ответа

Решение

Если вы хотите, чтобы изменение каталога сохранялось даже после выхода из программы. Вы можете завершить скрипт python с помощью "os.system("/bin/bash"), это оставит вас в оболочке bash внутри нового каталога.

#!/usr/bin/python
import os
if __name__ == '__main__':
    os.chdir("/home/name/projects/python")
    os.system("pwd")
    os.system("/bin/bash")

Для необходимости, поднятой в вашем комментарии "Я часто использую этот каталог, а не doind cd <path> каждый раз, когда я открываю терминал, я просто пишу ./progname и это меняет каталог
Я бы предложил использовать псевдоним bash, который изменит каталог:

bash:~$ alias mycd='cd /home/name/projects/python'

и используйте этот псевдоним в оболочке bash, чтобы изменить каталог:

bash:~$ mycd

Вы можете добавить этот псевдоним в свой.bashrc, что позволит вам использовать этот псевдоним каждый раз.

С уважением,

Ярон

Это не работает, потому что, когда вы запускаете скрипт, он создает новую среду. Когда ты cd в этой новой среде он работает, но возвращается к старой среде, как только программа завершается.

Если бы вы использовали скрипт bash, вы могли бы запустить source program.sh бежать program.sh в той же "среде", поэтому, когда программа завершает работу, она остается в том же каталоге.

Другой вариант кто-то разместил, выполняя /bin/bash после cd, похоже, работает, так как фактически создает новый процесс bash внутри вашей программы Python. Это означает, что ваша программа все еще работает и может не подходить для некоторых приложений.

Обратите внимание, что если ваша цель - просто создать ярлык для изменения каталога в терминале. Возможно, вам лучше использовать псевдоним bash.

import os
os.system('cd /home/name/projects/python')

Этот ответ в точности совпадает с принятым в том смысле, что он решает проблему, которая не добавляет никакой ценности, но делает это немного иначе. Я думаю, что этот ответ, возможно, добавляет ценность в объяснении и альтернативной реализации. Вы можете решить.

Хорошо, извините за вопли.

Вы должны просто отредактировать свой .bash_profile файл. Это действительно просто. Сенсорный создает файл, а затем открыть функционально открывает его. В вашем терминале:

touch ~/.bash_profile; open ~/.bash_profile

Это открывает текстовое редактирование. Создайте свой ярлык вот так, я положил его в конец моего файла:

alias cdd="cd ~/frequent/my-directory"

Затем запустите это, чтобы обновить ваш .bash_profile файл. (Или закройте и снова откройте терминал, как хотите.)

source ~/.bash_profile

Теперь вы просто запускаете вышеупомянутый ярлык:

Macbook-Spen:~ spen$ cdd

И это переключает ваш каталог, с гораздо меньшим количеством нажатий клавиш!

Macbook-Spen:my-directory spen$ 

Источники:

Другие вопросы по тегам