2016-03-07 2 views
3

Я пишу простой скрипт, чтобы сменить текущий рабочий каталог на другой каталог. Следующий скрипт работает нормально, пока программа не завершится, после чего я вернусь в свой домашний каталог.Изменить каталог в терминале с помощью 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 

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

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

+2

Почему вы делаете это на Python? – jonrsharpe

+0

Это своего рода часть более крупного проекта. – Krishh

+0

О, я вижу, что вы пытаетесь сделать. Python фактически меняет каталог в пределах его скриптов, но не в области вашего терминала – RafaelC

ответ

6

Если вы хотите, чтобы изменение каталога оставалось даже после выхода программы. Вы можете закончить сценарий питона с «os.system (»/bin/Баш «), это оставит вас в Баше оболочки внутри нового каталога.

#!/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:~$ alias mycd='cd /home/name/projects/python' 

и использовать этот псевдоним в bash для изменения каталога:

bash:~$ mycd 

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

С наилучшими пожеланиями,

Ярон

+0

Это работает! спасибо. Можете ли вы объяснить мне, что делает последняя команда? Создает ли он новый экземпляр терминала или что? – Krishh

+0

Он открывает новую оболочку bash в качестве подпроцесса, поэтому он использует новый каталог. Он отвечает на ваши вопросы, но я не уверен, насколько это полезно для крупномасштабного проекта. Для получения дополнительной информации см. Http://stackoverflow.com/questions/1506010/how-to-use-export-with-python-on-linux. – Yaron

+0

Я знал, что это можно сделать, используя псевдоним bash, я просто хотел знать, как это сделать с помощью python. Оба ваших решения работают. Еще раз спасибо! – Krishh

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

os.system() не работает с командой cd. – Krishh

+0

почему вы хотите это сделать? Если вы хотите запустить другую команду в каталоге/директории python , то после этого os.system ('cd/home/name/projects/python') Вы можете использовать os.system ('Another command') –

+0

его a небольшая часть более крупного проекта. – Krishh

0

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

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

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

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

+0

Я пробовал использовать исходную программу, но она продолжает бросать эту ошибку. 'bash: chdir: строка 7: синтаксическая ошибка рядом с неожиданным токеном"/home/krishh/projects/python/executables " bash: chdir: строка 7: os.chdir ("/home/krishh/projects/python/executables ") '' '' – Krishh

+0

Источник не может использоваться с скриптом Python. Он предназначен для запуска сценария bash, как если бы вы вводили команды в свою оболочку. Bash не понимает Python, поэтому это не работает. Вы могли бы, однако источник Баш скрипт, который выглядит следующим образом: 'кд/путь/к/мой/dir' ' питон my_python_script.py' Если источник этот Баш скрипт, то он изменит каталог, запустить питона скрипт и оставаться в этом каталоге после завершения. –

+1

@ SamuelO'Malley ты прав, я забыл об этом. Я на мобильный и не могу проверить. Я отредактирую свой ответ, чтобы удалить свою ошибку. –