小编典典

Python3子流程输出

python

我想运行Linux字数统计实用程序wc来确定/ var / log /
syslog中当前的行数,以便可以检测到它正在增长。我尝试了各种测试,虽然我从wc获得了结果,但它包括行数和命令(例如var / log /
syslog)。

所以它返回了:1338 / var / log / syslog但是我只想要行数,所以我想剥离/ var / log / syslog部分,只保留1338。

我曾尝试将其从字节串转换为字符串,然后剥离结果,但并不高兴。转换为字符串以及剥离,解码等的故事都是一样的-所有这些都无法产生我想要的输出。

这些是我得到的一些示例,在syslog中有1338行:

  • b‘1338 / var / log / syslog \ n’
  • 1338 / var / log / syslog

这是我为尝试破解此问题而编写的一些测试代码,但没有解决方案:

import subprocess

#check_output returns byte string
stdoutdata = subprocess.check_output("wc --lines /var/log/syslog", shell=True)
print("2A stdoutdata: " + str(stdoutdata))
stdoutdata = stdoutdata.decode("utf-8")
print("2B stdoutdata: " + str(stdoutdata))    
stdoutdata=stdoutdata.strip()
print("2C stdoutdata: " + str(stdoutdata))

输出是:

  • 2A stdoutdata:b‘1338 / var / log / syslog \ n’

  • 2B stdoutdata:1338 / var / log / syslog

  • 2C标准输出数据:1338 / var / log / syslog

  • 2D stdoutdata:1338 / var / log / syslog


阅读 152

收藏
2021-01-20

共1个答案

小编典典

我建议您subprocess.getoutput()按其实际用途来使用-
在shell中运行命令并获取其字符串输出(而不是字节字符串输出)。然后,您可以在空白处分割并从返回的字符串列表中获取第一个元素。

尝试这个:

import subprocess
stdoutdata = subprocess.getoutput("wc --lines /var/log/syslog")
print("stdoutdata: " + stdoutdata.split()[0])
2021-01-20