我正在尝试从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
谢谢!
答案 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脚本的输出。