【问题标题】:Python Popen, OS, Commands all return nothing when running a command in linux在 linux 中运行命令时,Python Popen、OS、命令均不返回任何内容
【发布时间】:2018-11-13 01:19:15
【问题描述】:

所以我需要在客户端上获取某些东西的版本,当我尝试使用 Popen、Call、Check_Call、OS、Commands 时,它都返回一个空值。当我在腻子中的系统上运行脚本时,它返回一个空行。会不会是腻子的原因?在 Linux、CentOS 上运行,如果这有什么不同的话。提前谢谢你们。

def getJavacVer():
    p = sp.Popen("javac -version", stdout=sp.PIPE, shell=True)
    (output, err) = p.communicate()
    print output

【问题讨论】:

  • 可能的解决方案可能是为“javac”提供完整路径。此外,还有 PIPE stderr 并检查它。你可能会在那里找到一些东西

标签: python python-2.7 subprocess


【解决方案1】:

javac程序通过stderr返回-version输出,所以Popenstderr参数也需要传递。试试:

>>> from subprocess import Popen
>>> from subprocess import PIPE
>>> p = Popen(['javac', '-version'], stdout=PIPE, stderr=PIPE)
>>> p.communicate()
(b'', b'javac 1.8.0_171\n')

结果的第二个元素是捕获的stderr 流的输出,其中包含版本号。

【讨论】:

  • 哇,好吧,这很有趣。感谢您提出我的问题。我有一个次要问题,是否有任何理由将其返回到 stderr?
  • 它背后的开发人员可能认为那些特定的输出不属于标准流 - 但是,这些决定取决于编写程序的人,所以你必须问他们。
【解决方案2】:

这仅适用于 *nix:

import commands
print commands.getstatusoutput('javac -version')

【讨论】:

    【解决方案3】:

    感谢回答问题的几个小伙伴。输出被输出到标准错误而不是标准输出。谢谢大家

    【讨论】:

      猜你喜欢
      • 2021-06-10
      • 2015-10-25
      • 2013-08-27
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多