如何从shell运行python脚本

时间:2011-12-20 15:05:07

标签: python

我有一个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中调用方法的正确方法是什么?

5 个答案:

答案 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()

干杯,