如何从shell运行python脚本

如何从shell运行python脚本

问题描述:

我有一个noob问题。如何从shell运行python脚本

我有一个Python脚本路径1 /路径/ file.py

,脚本的功能:

def run (datetime = None): 

在shell我打电话

import path1.path2.file 
import datetime 
path1.path2.file.run(datetime = datetime(2011,12,1)) 

但我正在逐渐 TypeError:'模块'对象不可调用

最新的正确方法调用shell中的方法?

这个问题实际上是日期时间模块中。 您正试图调用模块本身。 你想调用的函数本身就叫做datetime。 所以你要调用的是:

datetime.datetime() 

或者您可以用导入功能:

from datetime import datetime 

,然后用调用它:

datetime() 

你可以写:

import path1 
path1.path2.file.run(...) 

或者:

from path1.path2.file import run 
run(...) 

不要忘记,你需要一个__init__.py文件中的每个目录(路径1和路径2),使该目录作为一个模块(然后,允许它是可导入的。)。如果您没有任何内容,该文件可能只是空的。

+0

第二个同样的错误 – SuperString 2011-12-20 15:11:05

+1

第一个得到AttributeError:'module'对象没有属性'path2' – SuperString 2011-12-20 15:11:16

+1

你在'path1'目录和'path2'目录有'__init __。py'文件吗? – tito 2011-12-20 15:15:11

尝试以下操作:

from path1.path2.file import run 
+0

同样的错误TypeError:'module'对象不可调用 – SuperString 2011-12-20 15:09:25

可以导入的文件夹做

import path1 

,然后调用简单的脚本做:

path1.path2.file.run(...) 

otherwhise,如果你不希望包括目录中的所有其他的东西,你可以用

from path1.path2.file import run 

在这种情况下,你只需要调用尝试:

run() 

干杯,

+0

做“import some_package”不会导入它的所有子包/子模块。 – yak 2011-12-20 15:42:39

如果没有这些工作,这里是一个(锂这样做的ttle有点脏)的方式:

# 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中。