Python 如何使用各种可选参数进行popen

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 如果延

我有一个进程需要在python中运行并获得的输出。如何运行它,以便用户可以指定可在进程上运行的可选参数。到目前为止,我的函数就是这样的


异步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)
    
    ...