我希望能够在脚本本身中记录用于运行当前 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/