如何在Mac上使用Python脚本删除bash历史记录?

3

我想用Python脚本在我的Macbook Pro上删除bash历史记录。

我知道两种用bash shell删除bash历史记录的方法:

1.rm ~/.bash_history

2.history -c

但是这些命令在使用subprocess执行Python脚本时不起作用:

1.rm ~/.bash_history

import subprocess
subprocess.call([‘rm’, ‘~/.bash_history'])

错误:

rm: ~/.bash_history:没有该文件或目录。

2. history -c

import subprocess
subprocess.call(['history', '-c'])

错误:

文件 "test.py",行 8,在 subprocess.call(['history', '-c']) 文件 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py",行>524,在call函数中, 返回Popen(*popenargs, **kwargs).wait() 文件 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py",行>711,在init函数中, errread,errwrite) 文件 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py",行>1308,在_execute_child函数中, raise child_exception

有什么想法吗?

1个回答

4
您有两个问题:
首先,Python不理解~,您需要扩展它:
subprocess.call(['rm', os.path.expanduser('~/.bash_history')])

其次,history是一个shell内建命令。请使用shell来调用它:

subprocess.call(['bash', '-c', 'history -c'])

嗨,谢谢回复。 我已经尝试了这段代码。 'subprocess.call(['rm', os.path.expanduser('~/.bash_history')])' 非常好用! subprocess.call(['bash', '-c', 'history -c']) - Matt
但是 subprocess.call(['bash', '-c', 'history -c']) 没有起作用...。我试图将评论编辑为良好的格式,但系统告诉我“评论只能在5分钟内编辑”。这是我第一次编辑评论,对于让它难以阅读,我感到抱歉。@devnull - Matt
而 subprocess.call(['rm', os.path.expanduser('~/.bash_history')]) 可以删除该文件。但当我在 shell 中运行 "history" 命令时,仍然可以看到命令历史记录。很抱歉问题仍未解决。 - Matt
@Matt 我明白了。这种方式在Python中不会按照你的期望工作。你无法在Python中做任何事情使得shell历史记录消失,也就是说,在退出Python后运行history命令,并且不产生任何输出是不可能的。简单的原因是你没有在__同一个__shell环境中执行history -chistory -w命令。 - devnull
我明白了。也许禁用bash历史记录是我应该尝试的选项。谢谢!@devnull - Matt
显示剩余2条评论

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