python - Python如何捕获命令行调用的所有输出
问题描述
我正在尝试从 python 脚本检查系统是否安装了 anaconda。
我对如何做到这一点的想法是从 python 脚本中调用“which conda”并获取输出。
尽管出于某种原因,这似乎是不可能的。在我的电脑(运行 High Sierra 的 2015 Macbook Pro)上,调用它似乎会引发某种错误。这没有问题,除了 python 似乎在任何情况下都无法捕获调用的错误输出。
我尝试过 subprocess.call、os.system、subprocess.run、subprocess.check_call、subprocess.check_output。
在所有这些情况下,尽管声称您可以使用 stderr=subprocess.PIPE 或 stderr=subprocess.STDOUT 将错误输出转发到标准输出,但我已经能够从任何这些调用中获得所有信息。
我可以在命令行上看到,当我调用“which conda”时,它会输出大量文本。
在 python 中,即使我按照指示捕获错误,输出也是一个空白字符串。
这令人难以置信的沮丧,因为这似乎是一件难以置信的简单事情;我现在花了很多时间。它可以在命令行上完成。为什么不能用这种高级语言来完成?
任何帮助/提示表示赞赏。谢谢!
解决方案
我没有anaconda ...我只是用python替换:
>>> from os import popen
>>> cmd = "which python"
>>> for i in popen(cmd):
... print(i)
...
/usr/bin/python
您还可以执行以下操作来获取路径的最后一部分:
from os import path, popen
cmd = "which python"
>>> for i in popen(cmd):
... print(path.basename(i))
...
python
这个也对我有用:
>>> for i in popen('whereis python'):
... for j in i.split():
... print(j)
...
python:
/usr/bin/python2.7-config
/usr/bin/python3.5
/usr/bin/python3.5m
/usr/bin/python
/usr/bin/python2.7
/usr/bin/python3.5m-config
/usr/bin/python3.5-config
/usr/lib/python3.5
/usr/lib/python2.7
/etc/python3.5
/etc/python
/etc/python2.7
/usr/local/lib/python3.5
/usr/local/lib/python2.7
/usr/include/python3.5
/usr/include/python3.5m
/usr/include/python2.7
/usr/share/python
/usr/share/man/man1/python.1.gz
推荐阅读
- c# - 使用 c# 在 XML 中的特定位置附加
- android - 奥利奥通知频道听起来不工作
- html - 在实时预览时单击浏览器中的元素时突出显示 HTML 代码
- entity-framework - 如何在实体框架中编写通用查询?
- angularjs - 我如何以角度动态化我的 Flash 消息。消息必须来自 API 响应
- python - 根据公共键对熊猫数据框进行分组
- laravel - 将策略与 apiResource 路由一起使用
- php - 目前使用 CodeIgniter 框架我有一个错误
- ios - 核心数据缺少模型版本?
- swagger - 在 swagger UI 上获取错误按钮,即 schemaValidationMessages