gpt4 book ai didi

python - "command not found"使用 python 在 os.system 参数中使用行

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:06 25 4
gpt4 key购买 nike

我是 python 的新手,正在做一些 xyz 项目,我正在做第 1 天的报告,获取数据并将其重定向到 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 中执行相同的操作时,它运行得非常好,或者如果我手动提供日期并运行上面的命令,它会成功运行。

请提供您的建议。

最佳答案

* 与问题无关;您要替换为 %s 的字符串以换行符结尾,该换行符 会破坏您的代码。

当您使用 os.popen('...').read() 时,您会得到 ...完整输出> -- 包括尾随换行符,shell 命令替换隐式修剪。

最好 的答案是用 Python 重写你的逻辑,但这里的简单答案是使用这样的命令替换,这也避免了尝试将值传递给通过字符串替换的脚本(这是解决 shell 注入(inject)安全漏洞的快速途径):

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')

关于python - "command not found"使用 python 在 os.system 参数中使用行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51637333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com