Добавить в ~ / .zshr c файл с python - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь написать cli, который будет принимать путь пользователей, который они вводят в командную строку, а затем добавить этот путь в файл правильного пути в зависимости от их оболочки - в данном случае zsh. Я попытался использовать:

    shell = str(subprocess.check_output("echo $SHELL", shell=True))
    click.echo("Enter the path you would like to add:")
    path = input()
    if 'zsh' in shell:
        with open(".zshrc", 'w') as zsh:
            zsh.write(f'export PATH="$PATH:{path}"')

Это не выдает ошибок, но, кажется, не добавляет к фактическому файлу ~. / Zshr c. Есть ли лучший способ добавить файл, не открывая его вручную и не вводя его?

Новое в этом, извините, если это глупый вопрос ...

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

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

from pathlib import Path
import os


if 'zsh' in os.environ.get("SHELL", ""):
    with open(<b>Path.home() / </b>".zshrc", <b>'a'</b>) as f:
        f.write(f'export PATH={path}:$PATH')

with (Path.home() / ".zshrc').open("a") as f: также будет работать.

Обратите внимание, что .zprofile будет предпочтительным местом для обновления переменной окружения, такой как PATH, а не .zshrc.

0 голосов
/ 12 марта 2020

Решено! Просто хочу поставить ответ здесь, если кто-то сталкивается с той же проблемой. Вместо того, чтобы пытаться открыть файл с помощью

with open(".zshrc", 'w') as zsh:
    zsh.write(f'export PATH="$PATH:{path}"')

, вы можете просто сделать

subprocess.call(f"echo 'export PATH=$PATH:{path}' >> ~/.zshrc", shell=True)

Если у кого-нибудь есть способ удалить из ~ / .zshr c с помощью python, было бы очень полезно ...

...