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

前端 未结 1 832
[愿得一人]
[愿得一人] 2021-01-25 17:27

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

her

相关标签:
1条回答
  • 2021-01-25 17:38

    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)
提交回复
热议问题