2013-08-19 2 views
2

Моя конечная цель - захватить предыдущую команду, выполненную в терминале. Поскольку ~/.bash_history не включает команды текущего сеанса терминала, я не могу просто прочитать этот файл.Python: получить команду оболочки 'history'

Из другого потока, я нашел этот скрипт:

from subprocess import Popen, PIPE, STDOUT 
shell_command = 'bash -i -c "history -r; history"' 
event = Popen(shell_command, shell=True, stdin=PIPE, stdout=PIPE, 
    stderr=STDOUT) 

output = event.communicate() 

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

+0

'history' не является исполняемым, это встроенная команда оболочки. – geoffspear

+3

Отметьте [вопрос о том, как запустить встроенные встроенные башки] (http://stackoverflow.com/questions/5460923/run-bash-built-in-commands-in-python) –

ответ

4

Почему вы не читаете файл напрямую. /.bash_history`

for history in open('/home/user/.bash_history'): 
    print(history, end='') 
+0

Потому что моя конечная цель - захват предыдущего команда, выполняемая в терминале, а ~/.bash_history не включает команды из текущего сеанса терминала. –

+0

Я должен сделать это более ясным в исходном вопросе. Спасибо за совет. –

+0

Это поведение по умолчанию, но вы можете написать функцию, чтобы заставить оболочку добавить предыдущую команду в файл истории, прежде чем запрашивать новую команду. –

Смежные вопросы