python运维脚本编写中踩过的坑——更改当前工作目录

更改当前工作目录的坑

linux运维过程中经常会写这样的shell脚本:

trade_date=$1
# 对比业务日志
cd /workplace/compareTools/
python3 compareBiz.py $trade_date > biz.log
cd -

# 对比流水
cd /workplace/compare_storage_tool/bin
sh compare.sh $trade_date
cd -

# 搜集对比结果
rm -rf log/$trade_date
mkdir log/$trade_date
cp /workplace/compareTools/*.log log/$trade_date

上面这个脚本做了这么几件事情:
1、首先接收一个交易日期的参数,例如20230106
2、然后分别进入到业务日志对比工具和流水对比工具的目录下,执行对比工具
3、最后搜集一下对比的结果日志

其中的cd指令会更改shell当前的工作目录,只有在正确的工作目录下才能找到对比工具。

于是我心血来潮,把shell脚本改成了python脚本:

import subprocess,sys

trade_date = sys.argv[1]
# 对比业务日志
subprocess.run('cd /workplace/compareTools/', shell=True)
subprocess.run('python3 compareBiz.py %s > biz.log' % trade_date, shell=True)
subprocess.run('cd -', shell=True)

# 对比流水
subprocess.run('/workplace/compare_storage_tool/bin', shell=True)
subprocess.run('sh compare.sh %s' % trade_date, shell=True)
subprocess.run('cd -', shell=True)

# 搜集对比结果
subprocess.run('rm -rf log/%s' % trade_date, shell=True)
subprocess.run('mkdir log/%s' % trade_date, shell=True)
subprocess.run('cp /workplace/compareTools/*.log log/%s' % trade_date, shell=True)

太完美了,用subprocess就搞定了。看起来没什么问题,该更改当前工作目录的地方都用了cd指令。

结果日志对比和流水对比失败,原因是找不到compareBiz.py和compare.sh … …

咋掉坑里的

在“subprocess.run(‘cd /workplace/compareTools/’, shell=True)”之后,通过"print(os.getcwd)"查看一下当前的工作目录,居然没有变化!!!!!

罪魁祸首就是“subprocess.run(‘cd xxx’, shell=True)”,这样写并不能改变python脚本的工作目录!!!!!!

怎样正确更改python脚本的工作目录

本来想优雅的改,于是想到了pathlib库的Path类。手册查了半天悲剧了,也是我才疏学浅,改不了… …

最后又回到了那个极其不优雅的os.chdir。好在它在3.6以后可以接 path-like object了,可以优雅的用Path啦!!!!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值