如何从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),使该目录作为一个模块(然后,允许它是可导入的。)。如果您没有任何内容,该文件可能只是空的。
尝试以下操作:
from path1.path2.file import run
同样的错误TypeError:'module'对象不可调用 – SuperString 2011-12-20 15:09:25
可以导入的文件夹做
import path1
,然后调用简单的脚本做:
path1.path2.file.run(...)
otherwhise,如果你不希望包括目录中的所有其他的东西,你可以用
from path1.path2.file import run
在这种情况下,你只需要调用尝试:
run()
干杯,
做“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中。
第二个同样的错误 – SuperString 2011-12-20 15:11:05
第一个得到AttributeError:'module'对象没有属性'path2' – SuperString 2011-12-20 15:11:16
你在'path1'目录和'path2'目录有'__init __。py'文件吗? – tito 2011-12-20 15:15:11