在Ubuntu Python 2.7中读取os.system()命令的输出

时间:2011-08-20 05:33:53

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

所以我在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. 如何解决?

2 个答案:

答案 0 :(得分:7)

  1. 您确定甚至创建了日志文件吗?我看不出这个名字的位置 - 但也许它是默认创建的。

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

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


  4. 编辑:刚刚测试过。此处扫描运行,但输出显示而不是写入文件。可能您错过了> nmapscan1.log来电中的os.system()部分。

    使用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()
    

答案 1 :(得分:0)

  1. 您可以在python中使用commands模块。
  2. 您可以使用subprocess模块。
  3. 主要问题是在sudo程序中使用python命令时没有要求输入密码,因此最好运行sudo python filename.py