从用户输入或命令行参数

时间:2018-01-20 03:09:54

标签: python

我想要一个模块从另一个模块导入数据,但我不想硬编码其他模块的名称。我尝试使用sys.argv,如:

from sys import argv
from argv[1] import database

但这会在invalid syntax下给我argv[1]。我也尝试过raw_input,如:

module = raw_input("Enter module name: ")
from module import database

这导致ImportError: No module named module。我检查过这不是因为名称是模块。其他变量名称具有相同的结果。 变量数据库的名称将始终相同。我已经通过从模块的名称导入成功导入了这个变量,但是我想这个代码来处理模块名称不同的情况,因为我可以使用多个,并且用户没有义务使用相同的每次都是模块名称。有没有办法做到这一点?我见过的所有其他问题都没有解决这个具体问题,我也没有在Python的帮助模块中找到任何信息。

1 个答案:

答案 0 :(得分:3)

您可以importlib.import_module使用字符串导入给定模块:

  

导入模块。 name参数以绝对或相对术语指定要导入的模块(例如pkg.mod或..mod)。如果名称是以相对术语指定的,那么package参数必须设置为包的名称,该包用作解析包名的锚(例如import_module('.. mod','pkg.subpkg')将导入pkg.mod)。

(强调我的)

romanString

另外,作为附带建议,如果您计划从用户获取命令行参数,请使用专用命令行参数解析库而不是使用裸>>> from importlib import import_module >>> module_name = 're' >>> module = import_module(module_name) >>> module <module 're' from 'C:\\Users\\Christian\\AppData\\Local\\Programs\\Python\\Python36\\lib\\re.py'> >>> 。那里有好几个。事实上,Python在标准库中有一个; argparse