如何使用python创建tcsh别名?

时间:2013-01-01 11:43:48

标签: python linux tcsh

我正在尝试从python脚本(运行Python 2.7.1)为tcsh创建别名。 一旦创建了别名,我想在我运行python脚本的同一个shell中使用它们。

我试过了:

os.system('alias test "echo test"')

但是我收到以下错误:

sh: line 0: alias: test: not found
sh: line 0: alias: echo test: not found

然后我尝试了:

os.system(r"""/bin/csh -i -c 'alias test "echo test"'""")

然后没有发生错误,但是别名没有注册,因此我无法使用它。

我正在寻找的结果是:

tcsh>python my_script.py
tcsh>test
test

谢谢!

2 个答案:

答案 0 :(得分:2)

os.system在子shell中执行该命令(看起来是bourne shell),所以即使你的语法正确alias test="echo test",它也不会在调用后持续存在(因为子shell已关闭) )。

但这似乎是一个XY问题。你问Y - 你想到的解决方案,而不是X - 你的问题。

如果您只是想一次创建一堆别名,为什么不使用c-shell脚本!? (为什么你用c-shell折磨自己完全是另一回事。)

答案 1 :(得分:1)

您的python脚本无法在shell的上下文中执行任何操作。当可以使用subprocess.call(..., shell=True)时,这将使用 new shell,因此不会更新现有的shell。

执行所需操作的唯一方法是让python脚本向stdout写入有效的shell命令,然后,不需要执行它,而是需要让shell评估python脚本的输出。