我想在python脚本中获取(zsh)shell提示符。只需使用
import os
prompt = os.environ['PS1']
似乎不是正确的方法,因为PS1
通常不会转发给子流程。在env | grep PS
外壳中以相同的方式失败。
因此,我得出的结论是,我可能应该启动一个交互式外壳程序作为子进程并查询其提示符。从外壳我可以做
zsh -c -i 'echo $PS1'
(必须为单引号,双引号失败)
我试图从python(2.7)subprocess
这样做,就像这样:
print subprocess.check_output(['-i','-c',r"'echo $PS1'"],executable="/bin/zsh")
这失败了
subprocess.CalledProcessError: Command '['-i', '-c', "'echo $PS1'"]' returned non-zero exit status 127
我认为这不是因为$PS1
而是由于我如何提供echo-part作为参数,因为以这种方式回显裸字符串也失败了。
最终来回尝试各种组合
prompt = subprocess.check_output("""zsh -c -i 'echo $PS1'""",shell=True,executable="/bin/zsh")
这似乎可以完成工作,但是对我来说似乎是错的,因为这正在启动一个shell,并在该shell中使用调用另一个shell -c -i 'echo $PS1'
。
获取shell提示的正确方法是什么?
print subprocess.check_output(['zsh','-i','-c','echo $PS1'])
当zsh
从另一个外壳运行时,必须用引号引起来echo $PS1
,以便整个字符串作为后面的单个参数传递-c
。它们必须是单引号,因为在双引号中,第一个外壳会扩展了$PS1
。
在Python中,整个命令是一个字符串,因此它像其他字符串一样被引用。添加第二组就像键入'echo $PS1'
(带引号)zsh
-外壳将查找名为的可执行文件,但找不到'echo $PS1'
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句