python3:确定python脚本是由bash还是powershell执行的

python3:确定python脚本是由bash还是powershell执行的,python,python-3.x,windows,powershell,git-bash,Python,Python 3.x,Windows,Powershell,Git Bash,我有一个由powershell和gitbash运行的python脚本。 有没有办法在python代码中识别脚本是在Powershell还是GitBash中执行的?您可以检查当前进程所属的进程树 import psutil import os this_proc = psutil.Process(os.getpid()) # Get process information for this process parent_proc = psutil.Process(os.getppid()) # G

我有一个由powershell和gitbash运行的python脚本。
有没有办法在python代码中识别脚本是在Powershell还是GitBash中执行的?您可以检查当前进程所属的进程树

import psutil
import os
this_proc = psutil.Process(os.getpid()) # Get process information for this process
parent_proc = psutil.Process(os.getppid()) # Get process information for the parent process
print("Parent: {}".format(parent_proc.name()))

您可以检查当前进程所属的进程树

import psutil
import os
this_proc = psutil.Process(os.getpid()) # Get process information for this process
parent_proc = psutil.Process(os.getppid()) # Get process information for the parent process
print("Parent: {}".format(parent_proc.name()))

对我来说,这听起来像是一场灾难。为什么不添加一个命令行选项来选择行为?在Unix计算机上,您可以获取有关父进程的信息,但在Windows上不可用。python.exe进程基本上独立于其父进程。唯一的问题是它使用的控制台或终端;这就是问题所在吗?git bash在mintty中运行,附带的控制台窗口隐藏在屏幕外。mintty将MSYS命名管道用于标准I/O。在这种情况下,许多控制台应用程序行为不正常(例如,
/c/Windows/System32/timeout.exe 1
失败)。除非使用
-i
选项强制使用交互模式,否则python.exe REPL将无法工作,并且任何直接使用控制台的脚本都将出现行为错误(例如
msvcrt.getch()
或通过打开“conin$”或“conout$”),听起来像是一个错误。为什么不添加一个命令行选项来选择行为?在Unix计算机上,您可以获取有关父进程的信息,但在Windows上不可用。python.exe进程基本上独立于其父进程。唯一的问题是它使用的控制台或终端;这就是问题所在吗?git bash在mintty中运行,附带的控制台窗口隐藏在屏幕外。mintty将MSYS命名管道用于标准I/O。在这种情况下,许多控制台应用程序行为不正常(例如,
/c/Windows/System32/timeout.exe 1
失败)。除非使用
-i
选项强制使用交互模式,否则python.exe REPL将无法工作,并且任何直接使用控制台的脚本都将出现错误行为(例如
msvcrt.getch()
或通过打开“conin$”或“conout$”)。