2016-09-29 69 views
2

有一些目录的文件和文件夹含有一些编程模块,如Perl模块,python文件和其他一些shell文件。 python(.py)中有一个主文件可以完成某些任务,这些任务需要某些模块不是全部。查找python脚本所需的模块

考虑一个场景,其中主python文件导入一些其他python文件,并在代码中使用os.system('perl perl_filename.pm')和这个perl_filename它自己调用其他perl模块和python文件之间。

如何在执行结束时找到此主python文件使用的所有文件和模块。一种解决方案是通过读取代码从头读取代码并找到依赖关系。但代码库是如此大,这是不可行的。

+0

如果您只想使用shell命令,为什么要标记Perl? Python进程可能不会打开任何Perl文件。 – simbabque

+0

python文件可以具有像os.system(“perl文件名”)这样的命令 –

回答

0

我的第一个猜测,很简单,但肯定不是最好的方法,是用lsof来显示哪个文件被这个脚本打开。例如:

$ sudo lsof | grep 31454 | grep python 
carbon-ca 31454  carbon txt  REG    9,2  4864  660953 /usr/bin/python 
carbon-ca 31454  carbon mem  REG    9,2  11608  785876 /usr/lib64/python2.6/lib-dynload/resource.so 
carbon-ca 31454  carbon mem  REG    9,2  24432  785877 /usr/lib64/python2.6/lib-dynload/selectmodule.so 
carbon-ca 31454  carbon mem  REG    9,2  22240  785814 /usr/lib64/python2.6/lib-dynload/_heapq.so 
carbon-ca 31454  carbon mem  REG    9,2  9872  785794 /usr/lib64/python2.6/lib-dynload/_bisectmodule.so 
carbon-ca 31454  carbon mem  REG    9,2  67296  656787 /usr/lib64/python2.6/site-packages/OpenSSL/SSL.so 
carbon-ca 31454  carbon mem  REG    9,2  12848  670980 /usr/lib64/python2.6/site-packages/OpenSSL/rand.so 
carbon-ca 31454  carbon mem  REG    9,2  94496  662596 /usr/lib64/python2.6/site-packages/OpenSSL/crypto.so 
carbon-ca 31454  carbon mem  REG    9,2  21376  673621 /usr/lib64/python2.6/site-packages/twisted/python/_epoll.so 
carbon-ca 31454  carbon mem  REG    9,2  14632  785853 /usr/lib64/python2.6/lib-dynload/fcntlmodule.so 
carbon-ca 31454  carbon mem  REG    9,2  21608  785817 /usr/lib64/python2.6/lib-dynload/_localemodule.so 
carbon-ca 31454  carbon mem  REG    9,2  7744  787783 /usr/lib64/python2.6/lib-dynload/syslog.so 
carbon-ca 31454  carbon mem  REG    9,2  23784  785886 /usr/lib64/python2.6/lib-dynload/zlibmodule.so 
carbon-ca 31454  carbon mem  REG    9,2  123608  785806 /usr/lib64/python2.6/lib-dynload/_ctypes.so 
carbon-ca 31454  carbon mem  REG    9,2  12680  785823 /usr/lib64/python2.6/lib-dynload/_randommodule.so 
carbon-ca 31454  carbon mem  REG    9,2  
3

这个问题太广泛了。我想你应该看看snakefood,这将帮助你找到依赖关系。

sfood -fuq main_file.py | sfood-target-files 
+0

我想只使用shell命令,如何做到这一点 –

+3

您在纯shell中编写'sfood'的替代品。可能你也需要重新实现Python。 – tripleee

+0

阅读代码库似乎比实施sfood更可行。让我们稍等片刻,我可以使用调试模块来顺序检查哪些文件被调用? –