簡體   English   中英

使用python在os.system的參數中使用一行“未找到命令”

[英]“command not found” using line in argument to os.system using python

我是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中執行相同的命令時,它運行得很好,或者如果我手動指定日期並運行上面的命令,則它可以成功運行。

請提供相同的建議。

*與問題無關; 您用%s替換的字符串以換行符結尾,而該換行符是破壞代碼的原因。

當您使用os.popen('...').read()你的整個輸出... -包括結尾的新行,其外殼命令替換隱式修剪。

最好的答案是用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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM