0

我在 python 中编写了一个 shell(使用 cmd 模块),当使用这个 shell 时,有关命令的某些信息会运行等。被输出到一个文本文件。我想编写一段代码来创建一个别名来查看我的 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 ,它就可以工作。

任何有关我的代码为什么会遇到错误或达到相同效果的更好方法的帮助将不胜感激。

4

1 回答 1

1

你会得到一个错误,因为alias它是一个bash命令,而不是一个可执行文件。您必须subprocess.call在 a 内运行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)             

但是,考虑到子进程产生一个新进程的事实,无论对它运行的环境进行什么更改,都会在退出时丢失。

您最好创建一个文件,在其中放置所有这些别名,并在需要使用它们时手动获取它们。

于 2012-08-10T10:06:46.887 回答