python命令行参数是用户添加的吗,python - 如何通过用户的命令行参数选择导入的python文件...

在一个主要的python文件中,我导入了另一个python文件,它们的名称分别为file1,file2,file3,并且它们内部都有一个名为scrap()的函数。我试图选择将根据用户输入运行哪个文件的scrap(),如下所示:python main.py file1

这是我的代码的相关部分:

import file1

import file2

import file3

fileName = sys.argv[1]

for func in ['%s.scrap' % fileName]:

meta, infos = func()

但是,我收到此错误消息:

Traceback (most recent call last):

File "main.py", line 50, in

meta, infos = func()

TypeError: 'str' object is not callable

请注意,当我使用for func in [file1.scrap]:时,它可以工作,只是不能将用户输入用作导入的文件名。有人可以告诉我该怎么做吗?

最佳答案

当实际上是从命令行参数构建的字符串时,您尝试将func作为函数调用。

为了达到您的目的,就像在prashant的链接文章中提到的那样,您可能希望使用imp模块之类的东西。

这是一个简单的例子import sys

import imp

# `imp.load_source` requires the full path to the module

# This will load the module provided as `user_selection`

# You can then either `import user_selection`, or use the `mod` to access the package internals directly

mod = imp.load_source("user_selection", "//site-packages/pytz/__init__.py")

# I'm using `user_selection` and `mod` instead of `pytz`

import user_selection

print(user_selection.all_timezones)

print(mod.all_timezones)

对于您的情况,您可能必须使用imp.find_module从名称中获取完整路径,或直接在命令行中提供完整路径。

这应该是一个起点

import sys

import imp

file_name = sys.argv[1]

f, filename, desc = imp.find_module(file_name, ['/path/where/modules/live'])

mod = imp.load_module("selected_module", f, filename, desc)

mod.scrap()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值