python找不到os模块_python找不到os模块_“找不到命令”;使用python在os.system的参数中使用line...

130318

I am new to python and working on some xyz project where i am taking the day-1 dated report, fetching the data and redirecting it into another file on linux machine

here is my code.

#!/usr/bin/python

import os

cur_date = os.popen("date -d '-1 day' '+%Y%m%d'").read()

print (cur_date)

os.system('zgrep "919535144580" /var/tmp/comp?/emse_revres_rdc.log.%s* | grep -v "RI" | cut -d "|" -f 9,10,23,24,26 | sort | uniq -c | sort -nr >> /var/tmp/Andy/test.txt'%cur_date)

it is printing below error.

20180731

**gzip: /var/tmp/comp?/emse_revres_rdc.log.20180731.gz: No such file or directory

sh: line 1: 1: command not found**

but when i am executing the same in shell it is running absolutely fine or if i manually give the date and run the above, it runs successfully.

Please provide your suggestions on the same.

解决方案

The * has nothing to do with the problem; the string you're substituting with %s ends with a newline, and that newline is what breaks your code.

When you use os.popen('...').read(), you get the entire output of ... -- including the trailing newline, which shell command substitutions implicitly trim.

The best answer would be to rewrite your logic in Python, but the easy answer here is to use such a command substitution, which also avoids trying to pass values into a script via string substitution (which is a fast route to shell-injection security bugs):

shell_script = r'''

cur_date=$(date -d '-1 day' '+%Y%m%d')

zgrep "919535144580" /var/tmp/comp?/emse_revres_rdc.log."$cur_date"* \

| grep -v "RI" \

| cut -d "|" -f 9,10,23,24,26 \

| sort \

| uniq -c \

| sort -nr \

>> /var/tmp/Andy/test.txt

'''

os.system(shell_script)

That said, if you're just going for the shortest change possible, put the following before your original code's os.system() call:

cur_date = cur_date.rstrip('\n')

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值