繁体   English   中英

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

[英]Determine calling executable in Python

我正在开发一个命令行应用程序,用于启动具有预生成环境的子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。 这个问题的措辞完全相同,但不涉及类似的问题,所以向它添加一个不相关的问题是不对的。

你可以使用psutil来做到这一点。

import psutil, os
Parent=psutil.Process(os.getpid()).parent()
ParentName=Parent.name() # e.g. bash, cmd.exe, etc

请看另一个例子的答案 您可以使用psutil.Process(os.getpid()).parent().name()来获取进程的名称。

如果您不能仅仅依靠检查操作系统,我建议添加命令行参数来指示版本。 它可能会使程序更“Pythonic”,因为“显式优于隐式”。

Python Docs argparse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM