Python如何从迭代中获取与subprocess.Popen一起运行的变量输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python如何从迭代中获取与subprocess.Popen一起运行的变量输入相关的知识,希望对你有一定的参考价值。

下面的代码使用http脚本迭代列表。然后应该将变量输入到x变量中。输出打印到文件。但文件产生输出说明script=",尝试过其他变化,但总是有错误。

with open("nmap_http_output.txt", "w") as f: 
    for x in scripts:   # iterate over http scripts
            print(x)  # for debugging purposes - this prints
            print(ip) # for debugging purposes - this prints
            nmap_http_ps = subprocess.Popen(['nmap', '-p80', ' --script=', x, ip], stdout=f, stderr=subprocess.STDOUT)
            output = nmap_http_ps.communicate()
            print(output)

输出是:

Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds
Starting Nmap 7.60 ( https://nmap.org ) at 2017-12-18 08:51 CST
Failed to resolve " --script=".
Failed to resolve """.
Unable to split netmask from target expression: "/usr/share/nmap/scripts/http-auth-finder.nse"
Failed to resolve """.
答案

看起来你有Popen错误的参数。

with open("nmap_http_output.txt", "w") as f: 
    for x in scripts:   # iterate over http scripts
        print(x)  # for debugging purposes - this prints
        print(ip) # for debugging purposes - this prints
        nmap_http_ps = subprocess.Popen(
            ['nmap', '-p', '80', ' --script=%s' % x, ip], stdout=f, stderr=subprocess.STDOUT
            )
        output = nmap_http_ps.communicate()
        print(output)

Popen期望一个命令的“元素”列表,但你必须要小心什么构成一个“元素”。我相信(现在不能测试)你必须解决两件事:

  • '-p'成为'-p', '80'(两个元素 - 一个开关和一个参数)
  • ' --script=', x成为'--script=%s' % x(而不是两个元素,这应该只是一个 - 并且还有一个领先的空间太多)

以上是关于Python如何从迭代中获取与subprocess.Popen一起运行的变量输入的主要内容,如果未能解决你的问题,请参考以下文章

Python从完成的子进程中获取环境

subprocess.run() 在第二次迭代中失败

Python:使用 subprocess.call 获取输出,而不是 Popen [重复]

如何从 Python subprocess.check_output() 捕获异常输出?

从 python 调用 perl 脚本在 commands.getstatusoutput 中有效,但在 subprocess.call 中无效

subprocess.call() 如何与 shell=False 一起工作?