Python 如何使用各种可选参数进行popen
我有一个进程需要在python中运行并获得的输出。如何运行它,以便用户可以指定可在进程上运行的可选参数。到目前为止,我的函数就是这样的Python 如何使用各种可选参数进行popen,python,arguments,popen,Python,Arguments,Popen,我有一个进程需要在python中运行并获得的输出。如何运行它,以便用户可以指定可在进程上运行的可选参数。到目前为止,我的函数就是这样的 异步def analyze_目标(self、target、batchSize、delay、maxdepth、maxurl、maxwait、recursive、useragent、htmlmaxcols、htmlmaxrows): cmd=“wappalyzer” 如果批量大小!="": cmd=cmd+“--batch size=“+batchSize 如果延
异步def analyze_目标(self、target、batchSize、delay、maxdepth、maxurl、maxwait、recursive、useragent、htmlmaxcols、htmlmaxrows):
cmd=“wappalyzer”
如果批量大小!="":
cmd=cmd+“--batch size=“+batchSize
如果延迟!="":
cmd=cmd+“--delay=“+delay
如果maxdepth!="":
cmd=cmd+“--max depth=“+maxdepth
如果maxURL!="":
cmd=cmd+“--max url=“+maxurl”
如果maxwait!="":
cmd=cmd+“--max wait=“+maxwait
如果recursive==True:
cmd=cmd+“--递归”
如果用户代理!="":
cmd=cmd+“--user-agent=“+useragent
如果htmlmaxcols!="":
cmd=cmd+“--html max cols=“+htmlmaxcols
如果htmlmaxrows!="":
cmd=cmd+“--html max rows=“+htmlmax rows
cmd=cmd+“”+目标
p=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.stdout,shell=True)
tmp=p.stdout.read()
self.logger.info(tmp)
p_状态=p.等待()
"""
返回所分析内容的日志
"""
message=f“已使用输出{tmp}对目标{target}进行了分析”
#此日志记录到docker日志
self.logger.info(消息)
返回tmp
的第一个参数,args
支持单个字符串或序列。例如,您可以将可选参数附加到列表
cmd=[cmd,*args]
或者,您也可以在函数的参数中使用**kwargs()(基本上将任何命名参数视为字典),并执行以下操作:
def analyze_目标(…,**kwargs):
...
对于键,值,单位为kwargs.items():
cmd+=f“-{key.replace(''.'-')}={value}”更改名称,因为破折号不能用作名称
...
#看起来是这样的:
分析目标(…,附加参数='test')
#cmd:所有其他参数+--附加参数=测试
不要构建字符串。只需构建一个列表,其中包含命令名及其参数作为单独的元素
async def analyze_target(self, target, batchSize, delay, maxdepth, maxurls, maxwait, recursive, useragent, htmlmaxcols, htmlmaxrows):
cmd = ["wappalyzer"]
if batchSize != "":
cmd.append("--batch-size=" + batchSize)
if delay != "":
cmd.append("--delay=" + delay)
if maxdepth != "":
cmd.append("--max-depth=" + maxdepth)
if maxurls != "":
cmd.append("--max-urls=" + maxurls)
if maxwait != "":
cmd.append("--max-wait=" + maxwait)
if recursive:
cmd.append("--recursive")
if useragent != "":
cmd.append("--user-agent=" + useragent)
if htmlmaxcols != "":
cmd.append("--html-max-cols=" + htmlmaxcols)
if htmlmaxrows != "":
cmd.append("--html-max-rows=" + htmlmaxrows)
cmd.append(target)
# Drop the shell=True, so that command is executed
# directly, without shell involvement
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
...