繁体   English   中英

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

[英]Python How to Capture All Output from Command Line Calls

我正在尝试从python脚本检查系统是否安装了蟒蛇。

我对如何执行此操作的想法是从python脚本调用“哪个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将错误输出转发至stdout,但我仍然无法从这些调用中获得任何信息。

我在命令行中看到,当我调用“哪个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM