Заменив файлы с ссылки на другие файлы


Я написал маленький скрипт на языке Python, чтобы заменить некоторые файлы в usr/бен с симлинки на файлы в другом месте.

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

#!/usr/bin/env python -tt

"""Xcode4 installs and expects to find a git installation at /usr/bin.
This is a pain if you want to control your own installation of git that
might be installed elsewhere. This script replaces the git files in
/usr/bin with symlinks to the preferred installation.

Update the 'src_directory' to the location of your preferred git installation.
"""
import sys
import os

#- Configuration  -----------------------------------------------------------------
src_directory = '/usr/local/git/bin/' # preferred installation
#----------------------------------------------------------------------------------

dest_directory = '/usr/bin/'
files = ('git','git-cvsserver','git-receive-pack','git-shell','git-upload-archive','git-upload-pack','gitk')

def main():
    if os.getuid():
        print "This script needs to be run as 'sudo python update_git.py'"
        sys.exit(1)

    for a_file in files:
        src_file = os.path.join(src_directory, a_file)
        dest_file = os.path.join(dest_directory, a_file)

        if os.path.exists(dest_file):
            os.remove(dest_file)

        os.symlink(src_file, dest_file)

if __name__ == '__main__':
    main()


1368
7
задан 28 мая 2011 в 09:05 Источник Поделиться
Комментарии
1 ответ

#!/usr/bin/env python -tt

"""Xcode4 installs and expects to find a git installation at /usr/bin.
This is a pain if you want to control your own installation of git that
might be installed elsewhere. This script replaces the git files in
/usr/bin with symlinks to the preferred installation.

Update the 'src_directory' to the location of your preferred git installation.
"""
import sys
import os

#- Configuration -----------------------------------------------------------------
src_directory = '/usr/local/git/bin/' # preferred installation
#----------------------------------------------------------------------------------

dest_directory = '/usr/bin/'
files = ('git','git-cvsserver','git-receive-pack','git-shell','git-upload-archive','git-upload-pack','gitk')

Официальное руководство по стилю Python рекомендует использовать, что написано заглавными_буквами назвать глобальные константы. Кроме того, некоторые из этих констант может быть лучше в качестве аргументов командной строки в скрипт. Таким образом, вам не нужно модифицировать скрипт, чтобы установить в другом месте.

def main():
if os.getuid():

Я предлагаю использовать ОС.getuid() != 0 потому что я думаю, что лучше быть явным. Код выполняется один и тот же, но этот путь я думаю, что его ясно, что вы проверяете на ноль, а потом логическое значение.

        print "This script needs to be run as 'sudo python update_git.py'"
sys.exit(1)

for a_file in files:

a_file довольно некрасиво. Я предполагаю, что вы используете его, чтобы избежать заменить файл строение. Предлагаю именем.

        src_file = os.path.join(src_directory, a_file)
dest_file = os.path.join(dest_directory, a_file)

if os.path.exists(dest_file):
os.remove(dest_file)

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

        os.symlink(src_file, dest_file)

if __name__ == '__main__':
main()

Вы не заметили каких-либо исключений. В скрипте это простое, что может быть хорошо. Но это может быть хорошей идеей, чтобы попробовать/поймать IOError/OSError и распечатать их для пользователей, мы надеемся, достаточно подробно, что пользователь может сказать, что происходит неправильно. Если вы не исключение будет брошено, но пользователь также увидеть трассировку стека, который может быть страшно.

5
ответ дан 28 мая 2011 в 03:05 Источник Поделиться