Python如何捕获命令行调用的所有输出

Python如何捕获命令行调用的所有输出,python,command-line,subprocess,Python,Command Line,Subprocess,我试图通过python脚本检查系统是否安装了anaconda 我的想法是如何从python脚本中调用'which conda'并获得输出 似乎出于某种原因,这是不可能的。在我的电脑上(2015年Macbook Pro运行High Sierra),调用此命令似乎会引发某种错误。这不会有问题,只是python似乎在任何情况下都无法捕获调用的错误输出 我尝试了subprocess.call、os.system、subprocess.run、subprocess.check\u调用、subprocess

我试图通过python脚本检查系统是否安装了anaconda

我的想法是如何从python脚本中调用'which conda'并获得输出

似乎出于某种原因,这是不可能的。在我的电脑上(2015年Macbook Pro运行High Sierra),调用此命令似乎会引发某种错误。这不会有问题,只是python似乎在任何情况下都无法捕获调用的错误输出

我尝试了subprocess.call、os.system、subprocess.run、subprocess.check\u调用、subprocess.check\u输出

在所有这些情况下,尽管声称可以使用stderr=subprocess.PIPE或stderr=subprocess.stdout将错误输出转发到stdout,但我仍然无法从这些调用中获得任何结果

我可以在命令行上看到,当我调用“which conda”时,它会输出大量文本

在python中,即使我按照指示捕获错误,输出也是一个空白字符串

这是令人难以置信的沮丧,因为这似乎是一件难以置信的简单的事情;我现在花了很多时间在这上面。这可以在命令行上完成。为什么不能用这种高级语言来完成呢


欢迎提供任何帮助/提示。谢谢

我没有水蟒。。。我刚刚用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

我没有水蟒。。。我刚刚用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

打印子流程的输出时,您正在打印子流程对象的
s.stdout
,对吗?打印子流程的输出时,您正在打印子流程对象的
s.stdout
,对吗?