Я пытаюсь написать свой собственный сценарий оболочки с помощью Bash и Python, и у меня есть отдельные модули внутри той же папки, что и основной скрипт оболочки. Сценарий основной оболочки читает, какие модули импортируются из файла с именем defaultmodules.txt
, а затем импортирует их. Я сделал это таким образом, потому что я хочу, чтобы любой пользователь оболочки мог просто изменить этот файл вместо того, чтобы входить в код, чтобы изменить, какие модули они хотят импортировать. В настоящее время файл содержит имена трех модулей.NameError при попытке использовать импортированный модуль
net
os
subprocess
Этот код используется для чтения имен модулей из файла и их импорта.
moduleList = []
with open('defaultmodules.txt', 'r') as mods:
for line in mods:
if "#" in line or line == ' ':
pass
else:
moduleList.append(line)
print("Importing module '{}'".format(line))
module = line.rstrip('\n')
print(__import__(module))
__import__(module)
print(module.__init__())
Однако, даже после импорта, после запуска os.system('echo test')
, который должен просто напечатать test
к консоли, я получаю следующее отслеживающий:
Traceback (most recent call last):
File "/home/dorian/Desktop/DEBPSH/DEBPSH.py", line 14, in <module>
os.system('echo test')
NameError: name 'os' is not defined
Что в моем коде может быть причиной, чтобы это произошло?
То есть '__import__' является функцией и * возвращает * модуль. Если вы не дадите ему имя, у него не будет имени. Так что дайте ему имя. – kindall
Могу ли я сохранить его в словаре вместо использования 'globals() [module]'? –
@Dorian yup - 'd = {}' ... then 'd [module] = module', затем доступ через' d ['os']. System() ', но это еще более неясно, чем выше ... Будьте проще просто попросите пользователя отредактировать свои импортные товары: -D –