我是python的新手,正在从事一些xyz项目,在该项目中,我以第一天的日期作为报告,获取数据并将其重定向到Linux机器上的另一个文件中
这是我的代码。
#!/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)
它正在打印以下错误。
20180731
**gzip: /var/tmp/comp?/emse_revres_rdc.log.20180731.gz: No such file or directory
sh: line 1: 1: command not found**
但是当我在shell中执行相同操作时,它运行得很好,或者如果我手动给出日期并运行上面的命令,则它可以成功运行。
请在同一点上提供您的建议。
答案 0 :(得分:0)
*
与问题无关;您用%s
替换的字符串以换行符结尾,而该换行符是破坏代码的原因。
使用os.popen('...').read()
时,将获得...
的 entire 输出-包括结尾的换行符,shell命令替换隐式修剪掉换行符。
最好的答案是用Python重写逻辑,但是简单的答案是使用这样的命令替换,这也避免了尝试将值传递到通过字符串替换的脚本(这是解决注入shell安全漏洞的快速方法):
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)
也就是说,如果您只想进行最短的更改,请在原始代码的os.system()
调用之前添加以下内容:
cur_date = cur_date.rstrip('\n')