Ваш вопрос не очень конкретный. Я предполагаю, что ваш модуль python вызывает отдельные программы (т. Е. Используя такие вызовы, как os.system() или стандартный подпроцесс модуля) и что вы хотите определить, какие программы вызывается.
Вот тривиальный питон программа, которая вызывает подпроцесс:
import os
os.system("echo hello")
Если вы используете Linux, вы можете использовать инструмент «Трассирование», чтобы отслеживать все системные вызовы программа делает (не только питон программы) ,
Если ваша программа питон называется «foo.py», то вы можете запустить Трассирование так:
strace -f -e trace=process python foo.py 2>output
Я сломаться, что это делает:
- -f вызывает Трассирование для отслеживания подпроцессов (и их системных вызовов).
- "-e trace = process" указывает strace отслеживать только связанные с процессом системные вызовы. Это уменьшает количество выходных данных из strace.
- strace выходы к потоку stderr - мы сохраняем это в файле 'output'.
Для вышеприведенной программы, вывод выглядит следующим образом:
execve("/usr/bin/python", ["python", "foo.py"], [/* 50 vars */]) = 0
clone(Process 1735 attached
child_stack=0, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0xbfe2b2ec) = 1735
[pid 1732] waitpid(1735, Process 1732 suspended
<unfinished ...>
[pid 1735] execve("/bin/sh", ["sh", "-c", "echo hello"], [/* 50 vars */]) = 0
[pid 1735] exit_group(0) = ?
Process 1732 resumed
Process 1735 detached
<... waitpid resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 1735
--- SIGCHLD (Child exited) @ 0 (0) ---
exit_group(0) = ?
Поиск «Exec», чтобы найти, где подпроцессы вызываются. В этом примере есть два из них: где был вызван сам python и где python вызывается «/ bin/sh».
Надеюсь, это поможет.
Довольно сложно без каких-либо знаний о вашей программе python или вызываемом модуле ... – Hyperboreus
любая команда терминала, которая может помочь? Я попробовал systrace, но результат слишком подробный, и поскольку есть много программ, это не помогает. – user1620745