簡體   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