在Ubuntu 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'。I want to know

  1. 如果我对问题的诊断是正确的,
  2. 如何修复?
  1. 您确定日志文件已经创建了吗?我不知道在哪里提到了这个名字,但可能是默认创建的。

  2. 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()
    你可以在python中使用commands模块。
  1. 您可以使用subprocess模块

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

最新更新