Python Как захватить весь вывод из вызовов командной строки - PullRequest
0 голосов
/ 30 ноября 2018

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

Моя мысль о том, как это сделать, состоит в том, чтобы вызвать 'which conda' из скрипта python и получить вывод.

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 30 ноября 2018

У меня нет анаконды ... Я просто заменил на 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
...