将输出读取到 os.system 命令内的变量中

将输出读取到 os.system 命令内的变量中

我有一个python在 Linux 中运行的脚本。我需要捕获命令的输出并将其存储到变量中,然后打印输出。下面的代码 -

#!/usr/bin/python
import os, time
systime=os.popen('date +"%m-%d-%y-%T"').read()
os.system("read c1 c2 c3 c4 c5 c6 < <(sar -u 1 1 | awk 'NR==4, NR==4 {print $4, $5, $6, $7, $8, $9}')")
os.system("echo $systime,$c1,$c2,$c3,$c4,$c5,$c6 >> outputfile.txt")

我使用 read 命令将命令给出的输出收集sar -u 1 1 | awk 'NR==4, NR==4 {print $4, $5, $6, $7, $8, $9}')到 6 个变量中。c1, c2, c3, c4, c5 c6当我尝试执行上面的代码时,出现以下错误 -

sh: -c: line 0: syntax error near unexpected token `<'

我什至尝试使用os.popen代替os.system但最终仍然得到相同的错误。建议我如何使用os.system命令存储变量以及如何在后期使用它们。我的目标是将所有变量(包括捕获的时间)打印到输出文件中outputfile.txt。 TIA

答案1

<(...)ksh 语法也被zshand识别bash,但当用作重定向的目标时,它仅被zshand支持bash

无论如何,这不是sh语法。 Python 的os.system()and os.popen()do runsh来解释给定的命令行。这些命令的每次调用都会运行一个新的 shell,因此其中定义的一个变量在下一个 shell 调用中将不可用。而且python变量不会自动成为 shell 变量。

在这里,你可以这样做:

os.system("""
  sar -u 1 1 |
    awk -v t="$(date +%m-%d-%y-%T)" -v OFS=, '
      NR==4 {
        print t, $4, $5, $6, $7, $8, $9
      }' > outputfile.txt""")

虽然从内部调用dateand awk(甚至是 shell)感觉很愚蠢,但pythonwhilepython本身非常有能力完成它们的工作。

相关内容