Запуск Piped CMD в Python - разные результаты - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь вызвать команду piped (echo -e "HEAD / HTTP / 1.0 \ n" | ncat -C localhost 80) в python.

from subprocess import call
cmd = 'echo -e "HEAD / HTTP/1.0\n" |  ncat -C localhost 80'
output=call(cmd, shell=True)
print output

Однако результаты отличаются от ожидаемых:

HTTP/1.1 400 Bad Request
...

Ожидаемый результат (при запуске этого cmd из оболочки):

HTTP/1.1 302 Redirect
...

Обновление: Я только что экспериментировал, и это, кажется, работает отлично.

from subprocess import Popen, PIPE
p1 = Popen(['echo', 'HEAD / HTTP/1.0\n'], stdout=PIPE)
p2 = Popen(["ncat", "-C", "localhost", "80"], stdin=p1.stdout)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]

1 Ответ

0 голосов
/ 31 января 2012

Ваш \n создает новую строку в строке python .Я предполагаю, что вы хотели echo интерпретировать это.Попробуйте сделать его необработанной строкой:

cmd = r'echo -e "HEAD / HTTP/1.0\n" |  ncat -C localhost 80'

Таким образом, python не будет интерпретировать '\ n', и он будет передан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...