Я пытаюсь вызвать команду 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]
Спасибо за идею, но все еще не работает ... –
Да, подумав об этом, даже если это буквальная новая строка, так что немного другая команда, новая строка находится внутри двойных кавычек, поэтому она все равно должна быть новой строкой в выход. – FatalError