python - 在 python 中访问之前的 bash 命令

标签 python bash

我希望能够在脚本本身中记录用于运行当前 python 脚本的命令。例如,这是我尝试过的:

#test.py
import sys,subprocess
with open('~/.bash_history','r') as f:
    for line in f.readlines():
        continue

with open('logfile','r') as f:
    f.write('the command you ran: %s'%line.strip('\n'))

但是 .bash_history 似乎没有按时间顺序排序。实现上述轻松记录的最佳推荐方法是什么?谢谢。

更新:不幸的是 sys.argv 并不能完全解决我的问题,因为我有时需要使用进程替换作为输入变量。

例如python test.py <( cat 文件 | head -3)

最佳答案

你想做的事并不普遍可行。正如 devnull 所说,bash 中的历史文件并不是为每个输入的命令编写的。在某些情况下,它根本不被写入(用户设置 HISTFILESIZE=0,或使用不同的 shell)。

早在调用 python 脚本之前,就会对键入的命令进行解析和处理。因此,你的问题与 python 根本无关。您想要做的事情是否可能完全取决于调用 shell。 bash 没有提供您想要的内容。

如果您可以控制调用者的 shell,您可以尝试使用 zsh。在那里,如果您 setopt INC_APPEND_HISTORY,zsh 将为输入的每个命令附加到其历史文件,因此您可以进行解析历史文件 hack。

关于python - 在 python 中访问之前的 bash 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22944675/

相关文章:

python - 在 Django View 中记录响应时间

bash - 如何与 bash 同时处理文件?

bash - 如何在其他脚本中使用 .bashrc 中定义的别名?

java - 启动Mule进行远程调试,无需修改wrapper.conf

python - python多行[for in]语句的正确格式

python - 无法从网页获取连接到不同参展商的链接

python - 如何将 Yolo 格式的边界框坐标转换为 OpenCV 格式

bash:如何将一个字符串添加到 stderr 行之前,并按准确顺序组合 stdout 和 stderr 并存储在 bash 中的一个变量中?

Bash,检查变量

python - 在 Python 中 bool(datetime) 可以评估为 False 吗?