首页 > 解决方案 > 如何检查脚本是从终端调用还是从另一个脚本调用

问题描述

我正在编写一个 python 脚本,只有当 python 脚本直接从终端运行而不是从任何其他脚本运行时,我才想执行一些代码。

如何在不使用任何额外命令行参数的情况下在 Ubuntu 中执行此操作。?

这里的答案不起作用确定程序是否从 Python 中的脚本调用

这是我的目录结构

home |-testpython.py |-script.sh

script.py 包含

./testpython.py

当我跑步时,./script.sh我希望发生一件事。当我./testpython.py直接从终端运行而不调用“script.sh”时,我希望发生其他事情。

我如何在调用方式中检测到这种差异。获取父进程名称总是返回“bash”本身。

标签: pythonlinuxbashubuntu

解决方案


您可能应该改用命令行参数,但这可行的。只需检查当前进程是否为进程组组长:

$ sh -c 'echo shell $$; python3 -c "import os; print(os.getpid.__name__, os.getpid()); print(os.getpgid.__name__, os.getpgid(0)); print(os.getsid.__name__, os.getsid(0))"'
shell 17873
getpid 17874
getpgid 17873
getsid 17122

在这里,sh是进程组组长,并且python3是该组中的一个进程,因为它是从sh.

请注意,管道中的所有进程都在同一个进程组中,最左边的是领导者。


推荐阅读