我在python中编写了一个shell(使用cmd模块),在使用这个shell时,有关命令的某些信息运行ect。输出到文本文件。我想编写一段代码来创建一个别名来查看我的bash shell中的文本文件(例如,好像我已经执行了以下命令:
alias latest.trc='less <path to file>
我目前最好的努力是:
x="alias %s = 'less %s'" % (<alias name>, <path>)
y=shlex.split(x)
atexit.register(subprocess.call, y)
这可以在退出时执行一些命令,例如,如果x =“echo'bye'”但我得到了错误
OSError: [Errno 2] No such file or directory
我输入的路径肯定是有效的,如果我直接从命令行运行x,它就可以工作。
任何有关我的代码遇到错误的原因或更好的方法来获得相同效果的任何帮助都将非常感激。
答案 0 :(得分:1)
您收到错误,因为alias
是bash
命令,而不是可执行文件。您必须在subprocess.call
内运行shell
:
import subprocess
import atexit
import shlex
x="alias %s = 'less %s'" % ('a', 'whatever')
y=shlex.split(x)
atexit.register(lambda args: subprocess.call(args, shell=True), y)
但是,考虑到子进程产生一个新进程的事实,无论对它所遇到的环境做出什么改变,都会在退出时丢失。
您最好创建一个文件,在其中放置所有这些别名并在需要时使用它们手动获取。