Переменные подпроцессора

1 import subprocess 2 raw = raw_input("Filename:").lower() 3 ip = raw_input("Host:").lower() 4 cmd = subprocess.call("tcpdump -c5 -vvv -w" + " raw " + " ip ",shell=True) 

Так что это мой сценарий. Я все работает, кроме одной ключевой цели, используя исходный вход. Это позволяет мне вводить все, что я хочу, но когда он идет на сохранение файла или с помощью ip / host doe, на самом деле ничего не делает. Конечно, он дает мне пакеты, но из локального хоста не я вхожу в хост.

как я знаю, что это не работает, потому что мой первый исходный вход – это имя файла, поэтому я поставил тест, когда я смотрю в папку, был мой скрипт, он создает файл с именем «raw», что на самом деле не принимает моего ввод только с использованием чего-то внутри моего «X» …

Поэтому я делаю несколько шансов прийти к следующему:

  1 import subprocess 2 raw = raw_input("Filename:").lower() 3 ip = raw_input("Host:").lower() 4 cmd = subprocess.call("tcpdump -c5 -vvv -w" + raw + "host" + ip,shell=True) 

Это здорово, потому что на самом деле он вызывает -w, но теперь он сохраняет его как rawhostip вместо «raw» s input. для справки это то, что команда выглядит в терминале:

 tcpdump -c5 -vvv -w savename host wiki2 

единственными двумя вариантами являются сакраменто и wiki2, остальные нужны для работы команды.

с этим скриптом я получаю эту ошибку:

 import subprocess raw = raw_input("Filename:").lower() ip = raw_input("Host:").lower() cmd = subprocess.call("tcpdump -c5 -vvv -w" + raw, "host" + ip,shell=True) 

Ошибка:

 Traceback (most recent call last): File "te.py", line 4, in <module> cmd = subprocess.call("tcpdump -c5 -vvv -w" + raw, "host" + ip,shell=True) File "/usr/lib/python2.6/subprocess.py", line 480, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.6/subprocess.py", line 583, in __init__ raise TypeError("bufsize must be an integer") TypeError: bufsize must be an integer 

Я утерян. Любая помощь будет большой, да, я знаю, посмотрите на док-файл подпроцесса на сайте: X, мне нужен человек, чтобы научить меня, я не понимаю, что я читаю.

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

2 Solutions collect form web for “Переменные подпроцессора”

Не используйте shell=True . Это должно быть False .

Вы делаете тонкие ошибки с помощью ввода. В частности, если у вас две строки:

 >>> s1 = 'Hello' >>> s2 = 'Hi' >>> s1 + s2 'HelloHi' 

Обратите внимание: между Hello и Hi нет пробела. Так что не делай этого. (Ваша строка 4)

Вы должны сделать (хороший способ):

 >>> raw = raw_input('Filename: ') Filename: test >>> ip = raw_input('Host: ') Host: 192.168.1.1 >>> command = 'tcpdump -c5 -vvv -w {0} {1}'.format(raw, ip) # the command goes here >>> subprocess.call(command.split(), shell=False) # call subprocess and pass the command as a list using split 

Теперь это должно сработать.

Вы не должны использовать строковую форму для функций subprocess . Пытаться:

 subprocess.check_call(["tcpdump", "-c5", "-vvv", "-w", raw, "host", ip]) 
Python - лучший язык программирования в мире.