【问题标题】:Storing subprocess.call() return value in a variable将 subprocess.call() 返回值存储在变量中
【发布时间】:2018-04-12 07:37:58
【问题描述】:

我正在尝试获取ls -l | awk '{print $1}' 的输出中的行数,如下图所示为7。

total
drwxrwxr-x
drwxrwxr-x
-rw-rw-r--
-rw-rw-r--
-rw-rw-r--
-rw-r--r--

我尝试将此值存储在变量count 中,但是当我打印计数时,该值是 0 而不是 7。我不知道为什么。

import subprocess

count = subprocess.call('ls -l | awk '{print $1}' | wc -l', shell=True)
print count

输出:

7
0

【问题讨论】:

  • subprocess.call() 不返回被调用进程的标准输出,而是返回码。在这种情况下,这是0(没有发生错误)
  • 无论如何存储实际答案而不是返回值?因为我使用管道和使用 subprocess.calls() 这样更容易
  • @Adonis 我正在尝试学习如何从 shell 中计算行数,而不仅仅是目录,因此 subprocess.call()
  • @wildwilhelm 有没有办法将管道与subprocess.check_output 一起使用?

标签: python subprocess


【解决方案1】:

您也可以使用 subprocess.check_ouput。顾名思义,它专门用于检查输出。

count = subprocess.check_output("ls -l | awk '{print $1}' | wc -l", shell=True)

【讨论】:

    【解决方案2】:

    Subprocess.call 不返回标准输出,因此您需要使用 Popen 代替。 这是你可以做的。

    import subprocess
    
    count = subprocess.Popen("ls -l | awk '{print $1}' | wc -l",stdout = subprocess.PIPE, shell=True)
    print(count.stdout.readlines())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-24
      • 2015-11-09
      • 2013-09-03
      • 2013-02-07
      • 2017-01-07
      • 2022-11-17
      • 1970-01-01
      • 2020-06-10
      相关资源
      最近更新 更多