Python: 获取Shell命令“history”的输出结果

5

我的最终目标是捕获在终端中执行的上一个命令。由于~/.bash_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()

这与我所寻找的非常接近,但它也不会包括当前终端会话的历史记录,因为它是作为子进程启动的。有没有办法在当前 shell 中执行类似的命令?


1
history 不是一个可执行文件,而是一个 shell 内置命令。 - Wooble
3
查看这个问题:如何在Python中运行Bash内置命令 - Paulo Almeida
1个回答

6
为什么不直接阅读文件~/.bash_history呢?
for history in open('/home/user/.bash_history'):
    print(history, end='')

1
因为我的最终目标是捕获在终端中执行的先前命令,而~/.bash_history不包括当前终端会话中的命令。 - Madison May
1
我应该在原始问题中更清楚地表达。不过还是谢谢你的建议。 - Madison May
2
这是默认行为,但你可以编写一个函数,使shell在提示新命令之前将上一个命令附加到历史文件中。 - edi_allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接