【问题标题】:In Ubuntu Python 2.7 reading output of an os.system() command在 Ubuntu Python 2.7 中读取 os.system() 命令的输出
【发布时间】:2011-08-20 05:33:52
【问题描述】:

所以我在 Ubuntu 11.4 和 Python 2.7 上运行如下代码:

p_scan_command = "sudo nmap -sC -sV -PN -O 192.168.0.1/24"
time.sleep(1.5)
os.system(p_scan_command)
f = open('nmapscan1.log', 'r')
print f.read()
f.close()

发生的情况是我最终没有结果,并且没有运行扫描,可能是因为它正在使用“sudo”运行。我想知道

  1. 如果我对问题的诊断是正确的,并且
  2. 如何解决?

【问题讨论】:

    标签: python ubuntu ubuntu-11.04 python-2.7 os.system


    【解决方案1】:
    1. 您确定甚至创建了日志文件吗?我看不到这个名字是在哪里提到的 - 但它可能是默认创建的。

    2. sudo 是否要求您输入密码? 这可以告诉你 sudo 是否真的在运行。

    3. os.system 有点被弃用或至少不赞成;最好使用subprocess.call()subprocess.check_call()subprocess.Popen()(为您提供一个可用于进一步控制进程的对象)。


    编辑:刚刚测试过。这里扫描运行,但输出显示而不是写入文件。可能您在os.system() 调用中缺少> nmapscan1.log 部分。

    使用subprocess,你会写

    sp = subprocess.Popen(['sudo', 'nmap', '-sC', '-sV', '-PN', '-O', '192.168.0.1/24'],
        stdout=file("nmapscan1.log", "w"))
    sp.wait()
    f = open('nmapscan1.log', 'r')
    print f.read()
    f.close()
    

    或者如果您不需要该文件,只需

    sp = subprocess.Popen(['sudo', 'nmap', '-sC', '-sV', '-PN', '-O', '192.168.0.1/24'],
        stdout=subprocess.PIPE)
    print sp.stdout.read()
    sp.wait()
    

    【讨论】:

    • 对。 OP 不应该真的使用 os.system 来处理这种事情。
    【解决方案2】:
    1. 您可以在 python 中使用commands 模块。
    2. 您可以使用subprocess 模块。

    主要问题是在python程序中使用sudo命令时不要求输入密码,所以最好运行sudo python filename.py

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2017-12-15
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多