我正在尝试使用Bash和Python编写自己的Shell脚本,并且在与主Shell脚本相同的文件夹中有单独的模块。主Shell脚本从称为的文件中读取要导入的模块defaultmodules.txt
,然后将其导入。我这样做是因为,我希望外壳程序的任何用户都能够简单地修改此文件,而不是进入代码来更改他们想要导入的模块。当前,该文件包含三个模块的名称。
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
我的代码中有什么可能导致这种情况发生?
While__import__
将加载模块并将其放入sys.modules
:
import sys
__import__('os')
'os' in sys.modules # True
没有绑定到它的引用,因此请保留以下内容:
globals()[module] = __import__(module)
然后,您可以使用os.system
等...
正如kindall在评论中简要指出的那样:
也就是说,
__import__
是一个函数并返回模块。如果您不给它起一个名字,它就不会有一个名字。所以给它起个名字吧。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句