如何按用户选择导入的python文件';s命令行参数
在一个主python文件中,我导入了另一个python文件,比如它们的名称是file1、file2、file3,所有这些文件中都有一个名为如何按用户选择导入的python文件';s命令行参数,python,python-3.x,command-line-arguments,argv,Python,Python 3.x,Command Line Arguments,Argv,在一个主python文件中,我导入了另一个python文件,比如它们的名称是file1、file2、file3,所有这些文件中都有一个名为scrape()的函数。我试图根据用户输入选择哪个文件的scrape()将运行,如下所示: python main.py file1 以下是我的代码的相关部分: import file1 import file2 import file3 fileName = sys.argv[1] for func in ['%s.scrape' % fileName
scrape()
的函数。我试图根据用户输入选择哪个文件的scrape()
将运行,如下所示:
python main.py file1
以下是我的代码的相关部分:
import file1
import file2
import file3
fileName = sys.argv[1]
for func in ['%s.scrape' % fileName]:
meta, infos = func()
但是,我收到以下错误消息:
Traceback (most recent call last):
File "main.py", line 50, in <module>
meta, infos = func()
TypeError: 'str' object is not callable
回溯(最近一次呼叫最后一次):
文件“main.py”,第50行,在
meta,infos=func()
TypeError:“str”对象不可调用
请注意,当我在[file1.scrap]中为func使用
时,它可以工作:
我只是不能使用用户输入作为导入的文件名。有人能告诉我怎么做吗?您正试图将func
作为函数调用,而实际上它是从命令行参数生成的字符串
出于您的目的,正如prashant的链接帖子中提到的,您可能希望使用类似模块的东西
这里有一个简单的例子
导入系统
进口小商品
#`imp.load_source`需要模块的完整路径
#这将加载作为“用户选择”提供的模块`
#然后可以“导入用户选择”,或者使用“mod”直接访问包内部
mod=imp.load\u source(“用户选择“,”//site packages/pytz/\uuuuu init\uuuuuu.py”)
#我使用的是'user_selection'和'mod'而不是'pytz'`
导入用户选择
打印(用户选择。所有时区)
打印(mod.all_时区)
在您的情况下,可能需要使用从名称获取完整路径,或者直接在命令行中提供完整路径
这应该是一个起点
导入系统
进口小商品
文件名=sys.argv[1]
f、 文件名,desc=imp.find_模块(文件名:['/path/where/modules/live'])
mod=imp.load_模块(“选定的_模块”,f,文件名,描述)
mod.scrape()
您试图将
func
作为函数调用,而实际上它是从命令行参数生成的字符串
出于您的目的,正如prashant的链接帖子中提到的,您可能希望使用类似模块的东西
这里有一个简单的例子
导入系统
进口小商品
#`imp.load_source`需要模块的完整路径
#这将加载作为“用户选择”提供的模块`
#然后可以“导入用户选择”,或者使用“mod”直接访问包内部
mod=imp.load\u source(“用户选择“,”//site packages/pytz/\uuuuu init\uuuuuu.py”)
#我使用的是'user_selection'和'mod'而不是'pytz'`
导入用户选择
打印(用户选择。所有时区)
打印(mod.all_时区)
在您的情况下,可能需要使用从名称获取完整路径,或者直接在命令行中提供完整路径
这应该是一个起点
导入系统
进口小商品
文件名=sys.argv[1]
f、 文件名,desc=imp.find_模块(文件名:['/path/where/modules/live'])
mod=imp.load_模块(“选定的_模块”,f,文件名,描述)
mod.scrape()