os.popen () переменные - PullRequest
       20

os.popen () переменные

0 голосов
/ 30 ноября 2010

Итак, у меня есть это приложение, которое довольно сложно ... Если говорить кратко, вот основные вещи, которые вы должны знать:

file_name = raw_input("Name your file:").lower()

os.popen(sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2)

, но, похоже, это не работает.Могу ли я получить исправление?Спасибо, Pastelinux

edit1: Хорошо, это то, что у меня сейчас, но оно не работает, есть какие-нибудь указания по исправлению?

import subprocess, os, sys

filename = raw_input('File name:').lower

pipe = os.popen("sudo tcpdump -c5 -w", 'filename')

pipe = popen("sudo tcpdump -c5 -w", shell=True, stdout=PIPE).stdout

Ответы [ 3 ]

2 голосов
/ 30 ноября 2010

Ваша проблема в том, что вы не передаете строку в качестве команды. Исправлен звонок на popen():

os.popen('sudo tcpdump -c5 -vvv -w {0} host wiki or host wiki2'.format(file_name))
2 голосов
/ 30 ноября 2010

Не используйте `os.popen ', вы должны использовать модуль подпроцесс .

Я предполагаю это (строка):

sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2

ваша команда.

Поскольку нам просто нужно вызвать tcpdump и не получать от него никакого вывода, мы используем subprocess.call

>>> subprocess.call(your_command.split())

Конечно, почему это не работает, зависит от того, в чем заключается ошибка, но именно так вы должны поступить. Если вы можете обновить ответ с вашей ошибкой, то это может быть ясно.

0 голосов
/ 30 ноября 2010

Если вы используете более новые версии Python, используйте модуль подпроцесса.

См. Информацию о замене os.popen по адресу:

В нем говорится: В Unix os.popen2, os.popen3 и os.popen4 также принимают последовательность в качестве команды для выполнения, и в этом случае аргументы будут передаваться программе напрямую без вмешательства оболочки.

pipe = os.popen("cmd", 'r', bufsize)
==>
pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
...