Saya mendapat error saat mencoba menggunakan “Outils personnalisation” > “Admin” > “Show Project Plan HTML” di PT9.0 pada Wasta-Linux. Ternyata, skrip python tersebut mencoba menggunakan Windows Registry untuk menemukan folder Paratext Projects. Perhatikan baris ke-3, “from _winreg import…” (dari cms/ProjectPlanImport.py):
def settingsDirectory():
# Find the directory with Paratext 8 projects using the windows registry
from _winreg import OpenKey, EnumValue, HKEY_LOCAL_MACHINE
strPath = r"SOFTWARE\WOW6432Node\Paratext\8"
try:
aKey = OpenKey(HKEY_LOCAL_MACHINE, strPath)
for i in [0,1,2,3,4,5]:
aName, aValue, irrelevant = EnumValue(aKey,i)
if aName == 'Settings_Directory':
return aValue + '\\'
return None
except WindowsError:
# The registry key was not found
return None
except:
raise
Namun, folder yang sama ini dapat ditemukan secara relatif menggunakan modul os.path. Jadi, saya memperbarui fungsi di sistem saya menjadi berikut:
def settingsDirectory():
# Find the directory with Paratext 8 projects using Python 2 tools.
cms_dir = os.path.dirname(os.path.realpath(__file__))
if os.path.basename(cms_dir) == 'cms' and os.path.isdir(cms_dir):
return os.path.dirname(cms_dir)
else:
return None
Jadi, saya menduga pertanyaan saya adalah: Apakah mungkin pada instalasi non-standar, folder cms dapat berada di tempat lain selain di dalam folder Paratext Projects, yang mengharuskan pemeriksaan registry di Windows? Atau, jika tidak, apakah ada yang bersedia memperbarui skrip ProjectPlanImport.py dan ProjectPlanRoot.py untuk menggunakan alat bawaan agar skrip tersebut lebih kompatibel secara universal?
Saya juga bersedia mencari cara untuk melakukan pemeriksaan OS dan menangani pencarian settingsDirectory dengan cara yang bergantung pada OS jika saya bisa mendiskusikan hal ini dengan orang yang tepat. Oh ya, tampaknya ini adalah dua-satunya tempat modul _winreg dirujuk dalam skrip cms.
I got an error trying to use “Outils personnalisation” > “Admin” > “Show Project Plan HTML” on PT9.0 in Wasta-Linux. It turns out the python script attempts to use the Windows Registry to find the Paratext Projects folder. Note the 3rd line, “from _winreg import…” (from cms/ProjectPlanImport.py):
def settingsDirectory():
# Find the directory with Paratext 8 projects using the windows registry
from _winreg import OpenKey, EnumValue, HKEY_LOCAL_MACHINE
strPath = r"SOFTWARE\WOW6432Node\Paratext\8"
try:
aKey = OpenKey(HKEY_LOCAL_MACHINE, strPath)
for i in [0,1,2,3,4,5]:
aName, aValue, irrelevant = EnumValue(aKey,i)
if aName == 'Settings_Directory':
return aValue + '\\'
return None
except WindowsError:
# The registry key was not found
return None
except:
raise
However, this same folder can be found in a relative fashion using the os.path module. So I updated the function on my system to the following:
def settingsDirectory():
# Find the directory with Paratext 8 projects using Python 2 tools.
cms_dir = os.path.dirname(os.path.realpath(__file__))
if os.path.basename(cms_dir) == 'cms' and os.path.isdir(cms_dir):
return os.path.dirname(cms_dir)
else:
return None
So I guess my question is: Is it possible that in a non-standard install the cms folder could be located somewhere other than within the Paratext Projects folder, which would necessitate the registry check in Windows? Or, if not, would someone consider updating the ProjectPlanImport.py and ProjectPlanRoot.py scripts to use the built-in tools to make the scripts more universally compatible?
I’d also be willing to work out a way to do an OS check and handle finding the settingsDirectory in an OS-dependent way if I could discuss this with the right person. By the way, these seem to be the only two places that the _winreg module is referenced in the cms scripts.
Diterjemahkan secara otomatis dari English