在 Python 中确定调用可执行文件
Determine calling executable in Python
我正在开发一个命令行应用程序,它使用预生成的环境启动子shell。
subprocess.call(subshell, shell=True, env=custom_environment)
它启动 subshell.bat
或 subshell.sh
取决于当前 os。
subshell = "subshell.bat" if os.name == "nt" else "subshell.sh"
但我希望在 Windows 上支持 Cygwin、Git Bash 和其他 运行,他们每个人都需要 subshell.sh
相反,即使 OS 是 Windows.
我想如果有一种方法可以确定 Python 进程的调用可执行文件,我可以改为检查它。
if calling_executable in ("bash", "sh"):
subshell = "subshell.sh"
elif calling_executable in ("cmd", "powershell"):
subshell = "subshell.bat"
else:
sys.exit() # unsupported shell
但我不确定该怎么做。关于如何以不同的方式处理它有什么想法或建议吗?
用法示例
$ mytool --enter
Entering subshell for bash.exe
ps。 this 问题措辞完全相同,但不涉及类似问题,因此在其中添加不相关的问题感觉不对。
如果您不能仅仅依靠检查操作系统,我建议您添加命令行参数来指示版本。它可能会使程序更多 "Pythonic" 因为 'explicit is better than implicit'.
您可以使用 psutil
来做到这一点。
import psutil, os
Parent=psutil.Process(os.getpid()).parent()
ParentName=Parent.name() # e.g. bash, cmd.exe, etc
参见 that answer 的另一个例子。您也可以使用 psutil.Process(os.getpid()).parent().name()
获取进程的名称。
我正在开发一个命令行应用程序,它使用预生成的环境启动子shell。
subprocess.call(subshell, shell=True, env=custom_environment)
它启动 subshell.bat
或 subshell.sh
取决于当前 os。
subshell = "subshell.bat" if os.name == "nt" else "subshell.sh"
但我希望在 Windows 上支持 Cygwin、Git Bash 和其他 运行,他们每个人都需要 subshell.sh
相反,即使 OS 是 Windows.
我想如果有一种方法可以确定 Python 进程的调用可执行文件,我可以改为检查它。
if calling_executable in ("bash", "sh"):
subshell = "subshell.sh"
elif calling_executable in ("cmd", "powershell"):
subshell = "subshell.bat"
else:
sys.exit() # unsupported shell
但我不确定该怎么做。关于如何以不同的方式处理它有什么想法或建议吗?
用法示例
$ mytool --enter
Entering subshell for bash.exe
ps。 this 问题措辞完全相同,但不涉及类似问题,因此在其中添加不相关的问题感觉不对。
如果您不能仅仅依靠检查操作系统,我建议您添加命令行参数来指示版本。它可能会使程序更多 "Pythonic" 因为 'explicit is better than implicit'.
您可以使用 psutil
来做到这一点。
import psutil, os
Parent=psutil.Process(os.getpid()).parent()
ParentName=Parent.name() # e.g. bash, cmd.exe, etc
参见 that answer 的另一个例子。您也可以使用 psutil.Process(os.getpid()).parent().name()
获取进程的名称。