Python Как захватить весь вывод из вызовов командной строки

Я пытаюсь с помощью скрипта python проверить, установлена ​​ли в системе анаконда.

Моя мысль о том, как это сделать, - это вызвать «which conda» из скрипта Python и получить результат.

Похоже, что по какой-то причине это невозможно. На моем компьютере (Macbook Pro 2015 года под управлением High Sierra) похоже, что вызов этого вызывает какую-то ошибку. Это не было бы проблемой, за исключением того, что python, похоже, ни при каких обстоятельствах не может фиксировать вывод ошибок из вызовов.

Я пробовал subprocess.call, os.system, subprocess.run, subprocess.check_call, subprocess.check_output.

Во всех этих случаях, несмотря на заявления о том, что вы можете перенаправить вывод ошибок на стандартный вывод с помощью stderr = subprocess.PIPE или stderr = subprocess.STDOUT, я смог получить все ничего из любого из этих вызовов.

Когда я вызываю "which conda", я вижу в своей командной строке, что она выводит большой объем текста.

В python, даже когда я обнаруживаю ошибки в соответствии с инструкциями, на выходе получается пустая строка.

Это невероятно расстраивает, потому что это кажется невероятно простым делом; и я потратил на это так много времени. Это можно сделать из командной строки. Почему это нельзя сделать на этом языке высокого уровня?

Любая помощь / советы приветствуются. Спасибо!

Когда вы распечатываете вывод подпроцесса, вы распечатываете s.stdout для объекта подпроцесса s, верно?

RealPawPaw 30.11.2018 04:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
384
1

Ответы 1

У меня нет анаконды ... Я просто заменил на питон:

>>> 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

Другие вопросы по теме