【问题标题】:How to count no of lines we are getting from subprocess.popen command如何计算我们从 subprocess.popen 命令获得的行数
【发布时间】:2019-02-08 14:05:57
【问题描述】:

我正在编写一个代码,其中我使用 subprocess.Popen 命令在终端上运行一个脚本,该脚本将从数据库中检索一些结果。我可能会从数据库中获得单个结果,也可能会从数据库中获得多个结果,基于这些结果我正在编写一个条件。为此,我想知道我从 subprocess 命令获得的输出数量。我知道,为了逐行读取标准输出,我们使用-

proc = subprocess.Popen(["some command"],stdout = subprocess.PIPE,stdin =subprocess.PIPE, shell=True)
for line in proc.stdout.readlines():
 //do whatever stuff you want

但是,如果我想从命令中计算 stdout 的结果数怎么办。 我尝试过使用

count=len(proc.stdout.readlines())

但即使我从标准输出获得输出,它也无法正常工作并给出计数值 =0。有人可以告诉我如何使用带有子进程的某些命令计算您从标准输出获得的输出数

我想要类似下面的东西

proc = subprocess.Popen(["some command"],stdout = subprocess.PIPE,stdin =subprocess.PIPE, shell=True)
count = len(proc.stdout.readlines())
if count ==1:
    for line in proc.stdout.readlines():
        // do something
elif count>1
    for line in proc.stdout.readlines():
        // do something

有人可以帮我一些方法吗??

【问题讨论】:

  • 一旦你已经用 readlines 读取了文件,第二次调用什么也得不到,因为你已经在文件的末尾了。保存 readLines() 的内容并在此副本上调用 len() 和您的循环。
  • 调用print(proc.stdout.readlines())后能看到屏幕上是否有输出吗?,看一眼stackoverflow.com/a/2813530/4990642

标签: python subprocess


【解决方案1】:

第一个 readlines 转到文件的末尾,所以第二个没有可读取的内容。 在 stdout 上执行 readlines 之前保存结果。

proc = subprocess.Popen(["ls"],stdout = subprocess.PIPE,stdin =subprocess.PIPE, shell=True)
out = proc.stdout.readlines()
count = len(out)
if count ==1:
    for line in out:
       print (line)
elif count>1:
    for line in out:
        print (line)

【讨论】:

  • 你可以这样做if out:
  • 您好,非常感谢......它工作正常......我已将您的答案标记为已接受......非常感谢您的帮助-@Olf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2011-10-25
  • 2013-08-11
相关资源
最近更新 更多