【问题标题】:shell command array output to csv columns using python?使用python的shell命令数组输出到csv列?
【发布时间】:2018-12-12 02:09:05
【问题描述】:

以下是'lastcomm' bash 命令的输出(日志)。

python3                root     __         0.34 secs Tue Dec 11 09:06
python3                root     __         0.32 secs Tue Dec 11 09:06
python3                root     __         0.36 secs Tue Dec 11 09:06
cron             SF    root     __         0.00 secs Tue Dec 11 09:06
sh               S     root     __         0.00 secs Tue Dec 11 09:06
python3                root     __         0.29 secs Tue Dec 11 09:06
cron             SF    root     __         0.00 secs Tue Dec 11 09:06
sh               S     root     __         0.00 secs Tue Dec 11 09:06
python3                root     __         0.30 secs Tue Dec 11 09:06
cron             SF    root     __         0.00 secs Tue Dec 11 09:06
sh               S     root     __         0.00 secs Tue Dec 11 09:06
python3                root     __         0.31 secs Tue Dec 11 09:06
cron             SF    root     __         0.00 secs Tue Dec 11 09:06
sh               S     root     __         0.00 secs Tue Dec 11 09:06
python3                root     __         0.28 secs Tue Dec 11 09:06
sh                     root     __         0.00 secs Tue Dec 11 09:06
uname                  root     __         0.00 secs Tue Dec 11 09:06

我在 python 中使用以下代码得到了这个。

import subprocess
file_ = open("pacct.csv", "w")
subprocess.Popen(['lastcomm'], stdout=file_)

我想按列分隔输出(日志)并使用列结构保存 csv 文件。

但上面的代码只保存了完全相同的输出(日志)的纯文本。 输出的分隔符​​(分隔符)不是“制表符”而是“不同大小的空间”,因此很难按列拆分列表。

如何按列拆分输出(日志)的元素并使用 python3 保存具有列结构的 csv 文件?

期望的结果: (如果我得到如下列表结构,我会将其转换为列结构-csv 文件。)

[['python3', '', 'root', '_', '0.34 secs Tue Dec 11 09:06'],
['python3', '', 'root', '_', '0.32 secs Tue Dec 11 09:06'],
['python3', '', 'root', '_', '0.36 secs Tue Dec 11 09:06'],
['cron', 'SF', 'root', '_', '0.00 secs Tue Dec 11 09:06'],
['sh', 'S', 'root', '_', '0.00 secs Tue Dec 11 09:06'], ...]

非常感谢。

【问题讨论】:

    标签: python python-3.x csv


    【解决方案1】:

    来自manpage

    For each entry the following information is printed:
              + command name of the process
              + flags, as recorded by the system accounting routines:
                   S -- command executed by super-user
                   F -- command executed after a fork but without a following
           exec
                   C -- command run in PDP-11 compatibility mode (VAX only)
                   D -- command terminated with the generation of a core file
                   X -- command was terminated with the signal SIGTERM
              + the name of the user who ran the process
              + time the process started
    

    很明显 lastcomm 提供了 command,flags,usertime

    "__" 只是占位符。您可以通过row.split("__")[1].lstrip(" ").rstrip("\n")获取时间

    对于command,从行开始搜索字符,直到出现前两个空格

    user 类似但相反。

    用空格去掉剩余的行包含flags

    【讨论】:

      猜你喜欢
      • 2015-12-11
      • 1970-01-01
      • 2016-04-21
      • 2015-02-11
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      相关资源
      最近更新 更多