繁体   English   中英

我的第一个代码-我是否需要添加错误消息?

[英]My First Code - Do I need to add error messages?

这是我的第一部分代码。 我正在尝试制作一个可以添加到我们的登录名的exe,它将检查.txt文件中的日期,然后将目录从网络驱动器复制到本地用户。 我这样做是因为Dynamo(revit插件)包(类似于python模块)在将它们保存在本地驱动器上时效果最佳。 我希望每个人的软件包都相同,以便我的脚本可以与每个人一起使用。 如果这篇文章对于stackoverflow来说太笼统了,我感到很抱歉,但是我对编码非常陌生,因此我有几个问题。 到目前为止,代码已经对我有用,但是在将其添加到30个人计算机中之前,我有点想反馈一下。

  1. 我应该为此添加任何错误捕获吗? 在人们使用try语句的地方,我也看到过类似的事情。 这对您有帮助吗?

  2. 我还读过有人描述了一个Inno Setup过程,该过程将在出现某种错误时重新创建已删除的目录,以便对本地驱动器没有任何更改。 除了将本地目录复制到其他地方并在不需要时删除副本外,我不知道如何在python中执行此操作。 似乎有点愚蠢,因为如果从网络复制失败,为什么我会期望一个非常相似的代码起作用?

  3. 该代码实际上会将目录实际复制到人们的本地目录。 我只预料到在开始更频繁的更改后,我们每隔几个月会使用一次软件包。 会有更好的方法来执行此操作,这样它运行的频率会降低,还是我不必担心在每次登录时都包含此信息?

我从查看使用Inno Setup的线程开始,但是我对于试图理解到底发生了什么感到非常困惑,并决定尝试python,我至少将它带了一些教程。https://forum.dynamobim.com/t /分发-发电机功能于一个组织的上下文/ 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")

我要做的第一件事是摆脱代码中的"C:/Users/" + user_name + "/AppData/行,因为我经常看到这会导致错误。

相反,我建议使用%AllUsersAppData% (有关此信息,您可以查看“ 认可的环境变量 ”)。

这应该使您摆脱将用户名导入代码中的需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM