2012-01-31 4 views
0

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

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 
... 

Ожидаемый результат (при запуске, что ЦМД из оболочки) является:

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] 

ответ

0

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

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

Таким образом, питон не будет интерпретировать «\ п», и она будет проходить вдоль.

+0

Спасибо за идею, но все еще не работает ... –

+0

Да, подумав об этом, даже если это буквальная новая строка, так что немного другая команда, новая строка находится внутри двойных кавычек, поэтому она все равно должна быть новой строкой в выход. – FatalError