0
我想在python中调用管道命令(echo -e“HEAD/HTTP/1.0 \ n”| ncat -C localhost 80)。在python中运行管道cmd - 不同的结果
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]
感谢您的想法,但仍然无法工作... – 2012-01-31 17:00:26
是的,虽然它是一个字面换行,所以稍微不同的命令后思考,换行符是在双引号内,所以它应该仍然是一个换行符输出。 – FatalError 2012-01-31 17:04:30