Я пытаюсь вызвать команду 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]