获取当前文件路径 import 原理 一般把模块组成的集合称为包(package)

 

获取当前文件路径

testpath.py

import sys

print(sys.path)





[root@d mapReduceLog]# python testpath.py
['/data/mapReduceVisitorLog/mapReduceLog', '/root/anaconda3/lib/python35.zip', '/root/anaconda3/lib/python3.5', '/root/anaconda3/lib/python3.5/plat-linux', '/root/anaconda3/lib/python3.5/lib-dynload', '/root/anaconda3/lib/python3.5/site-packages', '/root/anaconda3/lib/python3.5/site-packages/Sphinx-1.4.6-py3.5.egg', '/root/anaconda3/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg']
[root@d mapReduceLog]# cd /
[root@d /]# python /data/mapReduceVisitorLog/mapReduceLog/testpath.py
['/data/mapReduceVisitorLog/mapReduceLog', '/root/anaconda3/lib/python35.zip', '/root/anaconda3/lib/python3.5', '/root/anaconda3/lib/python3.5/plat-linux', '/root/anaconda3/lib/python3.5/lib-dynload', '/root/anaconda3/lib/python3.5/site-packages', '/root/anaconda3/lib/python3.5/site-packages/Sphinx-1.4.6-py3.5.egg', '/root/anaconda3/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg']
[root@d /]# cd ~
[root@d ~]# python /data/mapReduceVisitorLog/mapReduceLog/testpath.py
['/data/mapReduceVisitorLog/mapReduceLog', '/root/anaconda3/lib/python35.zip', '/root/anaconda3/lib/python3.5', '/root/anaconda3/lib/python3.5/plat-linux', '/root/anaconda3/lib/python3.5/lib-dynload', '/root/anaconda3/lib/python3.5/site-packages', '/root/anaconda3/lib/python3.5/site-packages/Sphinx-1.4.6-py3.5.egg', '/root/anaconda3/lib/python3.5/site-packages/setuptools-27.2.0-py3.5.egg']
[root@d ~]#

 

当前文件路径

sys.path[0] 为绝对路径,与执行路径无关

 

 

获取输入,并对下一个脚本命令行传入参数,执行下一个脚本

D:\bizPythonDouban\onlinePolly\mapReduceLog\osSysInput.py

from tools import getNow
import os, sys

this_file_abs_path = sys.path[0]

sh_, nodes = 'ssh {} "scp /data/visitlog/{} root@d:/data/mapReduceVisitorLog/{}/"', ['a', 'b', 'c']

inputDate = sys.argv[0]
inputDate = inputDate.upper()

if inputDate == 'TODAY':
Ymd = '%Y-%m-%d'
today = getNow(format_=Ymd)
for i in nodes:
cmd_ = sh_.format(i, '*{}'.format(today), i)
print(cmd_)
os.system(cmd_)
cmd_ = 'python {}{}mapReduceBatchDeleteLoopDateSysInput.py {} {} '.format(this_file_abs_path, os.sep, today, today) # 对下一个脚本命令行传入参数
print(cmd_)
os.system(cmd_)


mapReduceBatchDeleteLoopDateSysInput.py
from tools import *
import math, sys

dateFrom, dateEnd = sys.argv[1], sys.argv[2]
mktimeFrom, mktimeEnd = date2mktime(dateFrom), date2mktime(dateEnd)
db_operation_step = 3000
print(mktimeFrom, mktimeEnd)

 

 

Python中import的用法 - 知乎
https://zhuanlan.zhihu.com/p/63143493

  • import module_name。即import后直接接模块名。在这种情况下,Python会在两个地方寻找这个模块,第一是sys.path(通过运行代码import sys; print(sys.path)查看),os这个模块所在的目录就在列表sys.path中,一般安装的Python库的目录都可以在sys.path中找到(前提是要将Python的安装目录添加到电脑的环境变量),所以对于安装好的库,我们直接import即可。第二个地方就是运行文件(这里是m1.py)所在的目录,因为m2.py和运行文件在同一目录下,所以上述写法没有问题。

用上述方法导入原有的sys.path中的库没有问题。但是,最好不要用上述方法导入同目录下的文件!因为这可能会出错。

 

 

故事是从这篇台湾同胞的博客(Python 的 Import 陷阱)开始的,然后又跳到了Python社区的PEP 328提案(PEP 328 -- Imports: Multi-Line and Absolute/Relative),再结合过去的经验以及一些测试,我想我大概懂了吧。下面是我的总结,希望内容能够言简意赅、易于理解。

 

 

Python中import的用法 - 知乎https://zhuanlan.zhihu.com/p/63143493

 

总结import语句的第二种用法:

  • from package_name import module_name。一般把模块组成的集合称为包(package)。与第一种写法类似,Python会在sys.path和运行文件目录这两个地方寻找包,然后导入包中名为module_name的模块。

 

posted @ 2018-12-12 11:03  papering  阅读(500)  评论(0编辑  收藏  举报