Распечатать историю Bash с помощью Python - PullRequest
0 голосов
/ 28 ноября 2018

Я должен напечатать историю bash, используя пакет подпроцесса.

import subprocess
co = subprocess.Popen(['history'], stdout = subprocess.PIPE)
History = co.stdout.read()  
print("----------History----------" + "\n" + History)

, но они выдают ошибку

 Traceback (most recent call last):
  File "test.py", line 4, in <module>
    co = subprocess.Popen(['history'], stdout = subprocess.PIPE)
  File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Ответы [ 2 ]

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

Комплект правильный, чтение ~/.bash_history может быть лучшим вариантом:

from os.path import join, expanduser

with open(join(expanduser('~'), '.bash_history'), 'r') as f:
    for line in f:
        print(line)
0 голосов
/ 28 ноября 2018

Обычно вам нужно добавить shell=True аргумент к вашему Popen вызову:

co = subprocess.Popen(['history'], shell=True, stdout = subprocess.PIPE)

Или вручную указать оболочку, которую вы хотите вызвать.

co = subprocess.Popen(['/bin/bash', '-c', 'history'], stdout = subprocess.PIPE)

К сожалению, в данном конкретном случае это не поможет, потому что bash имеет пустую историю, когда используется неинтерактивно.

Рабочим решением было бы прочитать ${HOME}/.bash_history вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...