В Ubuntu Python 2.7 чтение вывода команды os.system () - PullRequest
2 голосов
/ 20 августа 2011

Итак, я запускаю код, который выглядит так в 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 ]

7 голосов
/ 20 августа 2011
  1. Вы уверены, что файл журнала даже создан?Я не вижу, где упомянуто это имя, но, возможно, оно создано по умолчанию.

  2. Вас спрашивают пароль по sudo?Это может сказать вам, действительно ли sudo запущено.

  3. os.system отчасти устарело или, по крайней мере, осуждается;лучше использовать subprocess.call(), subprocess.check_call() или subprocess.Popen() (дает объект, который вы можете использовать для дальнейшего управления процессом).


РЕДАКТИРОВАТЬ: Только что протестировано.Здесь сканирование выполняется, но вывод выводится вместо записи в файл.Возможно, вы пропускаете часть > 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()
0 голосов
/ 20 августа 2011
  1. Вы можете использовать commands модуль в Python.
  2. Вы можете использовать subprocess модуль.

Основная проблема заключается в использовании команды sudo внутриpython программа не запрашивает пароль, поэтому лучше запустить sudo python filename.py

...