逐行打印变量,字符串在前面 Python 2.7
Print variable line by line with string in front Python 2.7
我正在 Python 中编写一个侦察工具,我 运行 在尝试在多行变量前面打印一个字符串而不编辑字符串本身时遇到了一些问题
这是我的一小段代码:
# ...
query1 = commands.getoutput("ls -1 modules/recon | grep '.*\.py$' | grep -v '__init__.py'")
print("module/%s/%s" % (module_type, query1.strip(".py"))
我想添加 "module/#module_type/#module_name" 和模块名称是唯一改变的东西。因此,使用 shodan 和 bing 模块(随机)输出将如下所示:
modules/recon/shodan
modules/recon/bing
但我得到
modules/recon/bing.py
shodan
谢谢!
你可以像这样做你要求的事情:
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" 功能来简化命令,前提是您查找模块的位置(例如 modules/recon)与您需要的前缀匹配输出:
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))
我正在 Python 中编写一个侦察工具,我 运行 在尝试在多行变量前面打印一个字符串而不编辑字符串本身时遇到了一些问题
这是我的一小段代码:
# ...
query1 = commands.getoutput("ls -1 modules/recon | grep '.*\.py$' | grep -v '__init__.py'")
print("module/%s/%s" % (module_type, query1.strip(".py"))
我想添加 "module/#module_type/#module_name" 和模块名称是唯一改变的东西。因此,使用 shodan 和 bing 模块(随机)输出将如下所示:
modules/recon/shodan
modules/recon/bing
但我得到
modules/recon/bing.py
shodan
谢谢!
你可以像这样做你要求的事情:
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" 功能来简化命令,前提是您查找模块的位置(例如 modules/recon)与您需要的前缀匹配输出:
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))