2016-09-29 72 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更可行。讓我們稍等片刻,我可以使用調試模塊來順序檢查哪些文件被調用? –