2016-09-19 4 views
0

Le script suivant n'imprime pas les noms contenus dans chaque module Python de la liste. Quand je l'exécute, chaque commande dir (mod) renvoie la même liste de noms. C'est comme si la variable 'mod' n'était pas comprise par dir. La boucle for ne semble pas être le problème. Des idées pour réparer?Script pour imprimer les noms dans les modules Python

#!/usr/bin/python 

# Print out names in modules 
# https://docs.python.org/2/py-modindex.html 
import os, sys, re, subprocess, platform, shutil, argparse, test, xml, time, urllib2, getopt 

def print_modules(module_list): 
    for mod in module_list: 
     print '------------' 
     print mod 
     print '------------' 
     print dir(mod) 
     print 

# Use split() on a string to create a list (the lazy way!) 
module_list = 'os sys list __builtins__ re subprocess platform shutil argparse test xml time urllib2 getopt'.split() 
print type(module_list) 
print_modules (module_list) 
+0

Prenez note que vous passez dans un '' str' qui dit 'os'', '' sys'', etc, et non le module réel (donc votre résultat est effectivement 'dir (str)' pour tous les 'str's ... Si vous êtes vraiment paresseux, vous pouvez simplement faire' dir (globals() [mod]) ' contourner ça ... – metatoaster

Répondre

1

Le problème est que vous passez le nom du module comme variable dir fonction. Puisque le nom du module est passé en variable, il est considéré comme une chaîne et dir donne la sortie pour la chaîne. Après avoir obtenu le nom du module en tant que variable, nous devons évaluer en tant que module. Ainsi, nous aurons besoin du module importlib qui le convertira en module.

code:

#!/usr/bin/python 

# Print out names in modules 
# https://docs.python.org/2/py-modindex.html 
import os, sys, re, subprocess, platform, shutil, argparse, test, xml, time, urllib2, getopt 
import importlib 

def print_modules(module_list): 


    for mod in module_list: 
     module = importlib.import_module(mod, package=None) 
     print '------------' 
     print mod 
     print '------------' 
     print dir(module) 
     print 

# Use split() on a string to create a list (the lazy way!) 
module_list = 'os sys'.split() 
print type(module_list) 
print_modules (module_list) 

Sortie:

C:\Users\dinesh_pundkar\Desktop>python c.py 
<type 'list'> 
------------ 
os 
------------ 
['F_OK', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 
'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 
'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAI 
T', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'UserDict', 'W_OK', ' 
X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__name__', 
'__package__', '_copy_reg', '_execvpe', '_exists', '_exit', '_get_exports_list' 
, '_make_stat_result', '_make_statvfs_result', '_pickle_stat_result', '_pickle_s 
tatvfs_result', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closera 
nge', 'curdir', 'defpath', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error' 
, 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe' 
, 'extsep', 'fdopen', 'fstat', 'fsync', 'getcwd', 'getcwdu', 'getenv', 'getpid', 
'isatty', 'kill', 'linesep', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 
'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'popen2', 'popen3' 
, 'popen4', 'putenv', 'read', 'remove', 'removedirs', 'rename', 'renames', 'rmdi 
r', 'sep', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'startfile', 'stat', 'stat_ 
float_times', 'stat_result', 'statvfs_result', 'strerror', 'sys', 'system', 'tem 
pnam', 'times', 'tmpfile', 'tmpnam', 'umask', 'unlink', 'unsetenv', 'urandom', ' 
utime', 'waitpid', 'walk', 'write'] 

------------ 
sys 
------------ 
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__s 
tderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_g 
etframe', '_mercurial', 'api_version', 'argv', 'builtin_module_names', 'byteorde 
r', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_ 
write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix 
', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getcheckint 
erval', 'getdefaultencoding', 'getfilesystemencoding', 'getprofile', 'getrecursi 
onlimit', 'getrefcount', 'getsizeof', 'gettrace', 'getwindowsversion', 'hexversi 
on', 'long_info', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'pa 
th', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'py3kwarning', ' 
setcheckinterval', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'std 
in', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions', 'winver'] 



C:\Users\dinesh_pundkar\Desktop>