2012-01-31 76 views
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] 

回答

0

\n是產生在蟒蛇串一個換行符。我假設你想要echo來解釋這一點。嘗試使它成爲一個原始字符串:

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

這樣,python不會解釋'\ n'並且它會被傳遞。

+0

感謝您的想法,但仍然無法工作... – 2012-01-31 17:00:26

+0

是的,雖然它是一個字面換行,所以稍微不同的命令後思考,換行符是在雙引號內,所以它應該仍然是一個換行符輸出。 – FatalError 2012-01-31 17:04:30

相關問題