Мой первый код - нужно ли добавлять сообщения об ошибках? - PullRequest
0 голосов
/ 22 января 2019

Это мой первый бит кода.Я пытаюсь создать exe-файл, который мы можем добавить к нашему логину, который проверит .txt-файл на дату, а затем скопирует каталог с сетевого диска на локальный компьютер.Я делаю это, потому что в Dynamo (revit addin) пакеты (похожие на модули python) работают лучше всего, когда они хранятся на локальном диске.Я хочу, чтобы все пакеты были идентичными, чтобы мои скрипты работали со всеми.Извините, если этот пост слишком общий для stackoverflow, но я очень новичок в кодировании и из-за этого у меня есть несколько вопросов.Код работал для меня до сих пор, но я хотел бы получить некоторую обратную связь, прежде чем я добавлю это на компьютеры 30 человек, что-то напутало.?Я видел похожие вещи, где люди использовали операторы try.Это было бы полезно здесь?

Я также читал, что кто-то описывает процедуру установки Inno, которая воссоздает удаленный каталог, если есть какая-то ошибка, чтобы не было никаких изменений вместный драйв.Я не знаю, как сделать это в Python, кроме как скопировать локальный каталог в другое место и удалить копию, если она не нужна.Кажется глупым, потому что, если копирование из сети не удастся, почему я ожидаю, что сработает очень похожий код?

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

Я начал это с просмотра этой темы, которая использовала InnoНастройка, но я слишком запутался, пытаясь понять, что вообще происходит, и решил попробовать Python, в котором я, по крайней мере, взял пару уроков. https://forum.dynamobim.com/t/distribute-dynamo-in-an-organizational-context/28809

import shutil
import os

# Local standard Packages
# C:/Users/!!!User Name here!!!/AppData/Roaming/Dynamo/DynamoRevit/2.0/packages

# Local Prorubim Nodes
# May need to add later if we start using Dyno for shortcut keys and dynamo script management
# C:/Program Files/Prorubim Nodes

# !!! Temp Location !!! --Change this to the final location before implementing across company.
# X:/Revit/Dynamo Dev Temp 19-02-22/Test Python 19-02-22/Packages
#   X:/Revit/Dynamo Dev Temp 19-02-22/Test Python 19-02-22/Packages/JDRM Packages Version.txt

# Gets current user name fix paths below.
import getpass
user_name = getpass.getuser()
print(user_name)


# rmtree delete local
# copytree copies the directory on network
def update_package():
    shutil.rmtree("C:/Users/" + user_name + "/AppData/Roaming/Dynamo/Dynamo Revit/2.0/packages")
    shutil.copytree("X:/Revit/Dynamo Dev Temp 19-02-22/Test Python 19-02- 
                22/Packages",
                "C:/Users/" + user_name + "/AppData/Roaming/Dynamo/Dynamo 
                Revit/2.0/packages")

# Checks to see if the version file exists on local drive
version_local_exists = os.path.isfile("C:/Users/" + user_name + 
"/AppData/Roaming/Dynamo/Dynamo Revit/2.0/packages/JDRM Packages 
Version.txt")


# If version file doesn't exist it runs update_package function. If it does exist then it checks first line for date.
if version_local_exists:
    # local version file
    version_local_file = open("C:/Users/" + user_name + 
    "/AppData/Roaming/Dynamo/Dynamo Revit/2.0/packages/JDRM Packages 
    Version.txt", "r")
    version_local_date = version_local_file.read()
    version_local_file.close()

    # network version file
    version_network_file = open("X:/Revit/Dynamo Dev Temp 19-02-22/Test Python 
    19-02-22/Packages/JDRM Packages Version.txt", "r")
    version_network_date = version_network_file.read()
    version_network_file.close()

    # print for easier checking in python
    print(version_local_date)
    print(version_network_date)

    if version_local_date == version_network_date:
        print("Up to date version on local drive.")
    else:
        update_package()
        print("Upgrade has been run.")

else:
    update_package()
    print("First time install.")

print("C:/Users/" + user_name + "/AppData/Roaming/Dynamo/Dynamo Revit/2.0/packages")

1 Ответ

0 голосов
/ 23 января 2019

Первое, что я хотел бы сделать, это избавиться от строк "C:/Users/" + user_name + "/AppData/ в вашем коде, поскольку я вижу, что это приводит к ошибкам довольно часто.

Вместо этого я бы предложил использовать %AllUsersAppData%(вы можете посмотреть Распознанные переменные среды для получения дополнительной информации об этом).

Это должно позволить вам избавиться от необходимости импортировать имя пользователя в код.

...