Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-如果从环境shell更改为终端shell,请检查终端shell_Python_Linux - Fatal编程技术网

Python-如果从环境shell更改为终端shell,请检查终端shell

Python-如果从环境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

当终端打开时,设置环境外壳。如果我然后键入“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 = 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