我在我的python程序中调用一个包含一组python和一些C ++程序的模块。 我想知道是否有办法打印执行程序时调用的程序列表。该模块不是由我编写的,包含许多程序,所以我想避免在每个程序中打印路径。
如果可能出现类似情况,请有人告诉我。
谢谢
答案 0 :(得分:2)
您可以将sys.stdout替换为垃圾文件写入对象,以避免使用您不想要的语句。
import sys
class TrashFile(object):
def write(self, arg):
pass
i_stdout = sys.stdout
sys.stdout = TrashFile()
# Stop printing output on screen
print_trash()
sys.stdout = i_stdout
# Start to print
print_statement()
答案 1 :(得分:0)
你的问题不是很具体。我假设你的python模块调用单独的程序(即使用诸如os.system()之类的调用,或者标准模块'subprocess'),并且你想要确定调用哪些程序。
这是一个简单的python程序,它调用子进程:
import os
os.system("echo hello")
如果您使用的是Linux,则可以使用工具'strace'来跟踪程序所做的所有系统调用(而不仅仅是python程序)。
如果您的python程序名为'foo.py',那么您可以像这样运行strace:
strace -f -e trace=process python foo.py 2>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”。
希望这有帮助。