你可以做你所要求的是这样的:
from os import path
module_type = 'recon'
q = 'shoban.py\nbing.py' # insert the your shell invocation here
modules = (path.splitext(m)[0] for m in q.split('\n'))
formatted = ('modules/%s/%s' % (module_type, m) for m in modules)
print('\n'.join(formatted))
输出:
modules/recon/shodan
modules/recon/bing
但既然你已经用Python调用一个UNIX shell,你还不如用sed为字符串处理:
print(commands.getoutput("ls modules/recon/ | sed '/.py$/!d; /^__init__.py$/d; s/\.py$//; s/^/modules\/recon\//'"))
您还可以使用shell的“globbing”功能来使命令更加简单,如果,你正在寻找的模块(如模块/侦察)的位置,你需要输出前缀匹配:
print(commands.getoutput("ls modules/recon/*.py | sed 's/.py$//; /\/__init__$/d'"))
另一种选择是只使用Python的标准库:
from os import path
import glob
module_type = 'recon'
module_paths = glob.iglob('modules/recon/*.py')
module_files = (m for m in map(path.basename, modules) if m != '__init___.py')
modules = (path.splitext(m)[0] for m in module_files)
formatted = ("modules/%s/%s" % (module_type, m) for m in modules)
print('\n'.join(formatted))
这是挑剔的,但你可以使用'os.path.splitext'来摆脱文件扩展名而不是文字's [-3]' –
@АндрейБеньковский它似乎我意外地不接受它。代码运行良好,我得到了它的工作。谢谢! – R3C0Nx00