Python-如果从环境shell更改为终端shell,请检查终端shell
当终端打开时,设置环境外壳。如果我然后键入“csh”,它将开始在bash终端中作为程序运行一个c shell。我的问题是,在启动python脚本之前,如何检查以确定是否执行了cshPython-如果从环境shell更改为终端shell,请检查终端shell,python,linux,Python,Linux,当终端打开时,设置环境外壳。如果我然后键入“csh”,它将开始在bash终端中作为程序运行一个c shell。我的问题是,在启动python脚本之前,如何检查以确定是否执行了csh 谢谢您可以使用 import os shell = os.environ['SHELL'] 然后,您可以确保将shell设置为/bin/csh您可以使用os.getppid()查找命令名,并使用ps查找命令名: import subprocess import os ppid = os.getppid() out
谢谢您可以使用
import os
shell = os.environ['SHELL']
然后,您可以确保将
shell
设置为/bin/csh
您可以使用os.getppid()
查找命令名,并使用ps
查找命令名:
import subprocess
import os
ppid = os.getppid()
out = subprocess.check_output(['ps', '--format', '%c', '--pid', str(ppid)])
print(out.splitlines()[-1])
请注意,父进程可能不是shell。如果我从emacs内部启动的IPython会话运行代码,则父级是emacs:
In [170]: ppid = os.getppid()
out = subprocess.check_output(['ps', '--format', '%c', '--pid', str(ppid)])
print(out.splitlines()[-1])
In [172]: emacs
到目前为止你试过什么?我们不提供代码——我们帮助解决错误!我尝试了:os.system(“env ps-p$$”)和cmd=“csh”,然后对cmdI进行了一个子流程调用:os.system(“env ps-p$$”)。如果键入“env ps-f$$”,则应在中显示shell,但这在python脚本中不起作用。我还尝试了一个子进程调用;cmd=“csh”,然后对cmd执行子流程调用。这会使脚本停止运行。我还尝试了下面的建议,它允许我将shell设置为/bin/csh。但是,我有一些脚本,只有在运行python脚本之前键入csh时才有效,因此这不起作用。我还尝试先从终端执行csh,然后从python脚本执行os.system('echo$0'),但它不打印csh,而是打印sh
In [170]: ppid = os.getppid()
out = subprocess.check_output(['ps', '--format', '%c', '--pid', str(ppid)])
print(out.splitlines()[-1])
In [172]: emacs