在Python中确定调用可执行文件

时间:2015-07-01 09:05:04

标签: python bash shell python-2.x

我正在开发一个命令行应用程序,用于启动具有预生成环境的子shell。

subprocess.call(subshell, shell=True, env=custom_environment)

启动subshell.batsubshell.sh,具体取决于当前操作系统。

subshell = "subshell.bat" if os.name == "nt" else "subshell.sh"

但我希望支持Cygwin,Git Bash和其他在Windows上运行的人,并且他们每个都需要被subshell.sh代替,即使操作系统是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问题的措辞完全相同,但并不涉及类似的问题,因此向其添加不相关的问题并不合适。

2 个答案:

答案 0 :(得分:2)

您可以使用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()获取流程的名称。

答案 1 :(得分:1)

如果您不能仅仅依靠检查操作系统,我建议添加命令行参数来指示版本。它可能会使程序更多" Pythonic"因为'明确胜过隐含'。

Python Docs argparse