python - 如何检查脚本是从终端调用还是从另一个脚本调用
问题描述
我正在编写一个 python 脚本,只有当 python 脚本直接从终端运行而不是从任何其他脚本运行时,我才想执行一些代码。
如何在不使用任何额外命令行参数的情况下在 Ubuntu 中执行此操作。?
这里的答案不起作用: 确定程序是否从 Python 中的脚本调用
这是我的目录结构
home
|-testpython.py
|-script.sh
script.py 包含
./testpython.py
当我跑步时,./script.sh
我希望发生一件事。当我./testpython.py
直接从终端运行而不调用“script.sh”时,我希望发生其他事情。
我如何在调用方式中检测到这种差异。获取父进程名称总是返回“bash”本身。
解决方案
您可能应该改用命令行参数,但这是可行的。只需检查当前进程是否为进程组组长:
$ 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
.
请注意,管道中的所有进程都在同一个进程组中,最左边的是领导者。
推荐阅读
- html - 为什么这种悬停效果会将旁边的其他元素推开?
- javascript - 使用 EmberJS 和 Oauth2,失效后如何修改默认路由?
- python - PyPDF 读取文件夹中的每个 PDF
- javascript - 如何修改外部 JS 文件中的元素?
- zapier - 如何正确处理 Zapier 身份验证失败?
- javascript - 如何在 Bootstrap 中制作超过 3 张图像的轮播?
- python - 使用python在XML字符串中动态添加值
- sorting - Flutter/Dart 中的随机排序列表定义错误
- python-3.x - 使用事件查看器查找程序崩溃的原因 - Windows 10
- c - C语言中如何使用指针