我有一个noob问题。
我有一个python脚本path1 / path2 / file.py
该脚本具有以下功能:
def run (datetime = None):
在shell中我打电话
import path1.path2.file
import datetime
path1.path2.file.run(datetime = datetime(2011,12,1))
但我得到了 TypeError:'module'对象不可调用
在shell中调用方法的正确方法是什么?
答案 0 :(得分:4)
问题实际上是在datetime模块中。 您正在尝试调用模块本身。 您要调用的函数本身称为datetime。 所以你要打电话的是:
datetime.datetime()
或者你可以用以下函数导入函数:
from datetime import datetime
然后用:
调用它datetime()
答案 1 :(得分:1)
你可以写:
import path1
path1.path2.file.run(...)
或者:
from path1.path2.file import run
run(...)
不要忘记在每个目录(path1和path2)中需要一个__init__.py
文件,以将目录作为模块(然后允许它可导入)。如果您没有任何内容,那该文件就可以为空。
答案 2 :(得分:0)
尝试以下方法:
from path1.path2.file import run
答案 3 :(得分:0)
如果这些都不起作用,这是一种(有点脏)的方式:
# Python <= 2.7
namespace = {}
exec open("path1/path2/file.py").read() in namespace
namespace["run"](datetime=datetime.datetime(2011,12,1))
或
# Python >= 3.0
namespace = {}
exec(open("path1/path2/file.py").read(), namespace)
namespace["run"](datetime=datetime.datetime(2011,12,1))
当然,您可以省略namespace = {}
和in namespace
/ , namespace
部分,但是file.py
中的代码实际上可能会更改您的shell中的其他变量。< / p>
答案 4 :(得分:-1)
你可以导入一个文件夹
import path1
然后简单地调用脚本:
path1.path2.file.run(...)
如果您不想在目录中包含所有其他内容,可以尝试使用
from path1.path2.file import run
在这种情况下,您只需致电:
run()
干杯,