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

Joh*_*ian 2 python ubuntu os.system python-2.7 ubuntu-11.04

所以我在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()
Run Code Online (Sandbox Code Playgroud)

发生的事情是我最终没有结果,并且扫描没有运行,可能是因为它正在运行'sudo'.我想知道

  1. 如果我对问题的诊断是正确的,那么
  2. 怎么解决?

glg*_*lgl 7

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

  2. 你被要求输入密码sudo吗?这可以告诉你sudo是否真的运行了.

  3. os.system有点被弃用或至少不赞成; 更好地使用subprocess.call(),subprocess.check_call()subprocess.Popen()(给你一个可以用来进一步控制过程的对象).


编辑:刚刚测试过.此处扫描运行,但输出显示而不是写入文件.可能你错过> nmapscan1.logos.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()
Run Code Online (Sandbox Code Playgroud)

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

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