【问题标题】:running piped cmd in python - different results在python中运行管道cmd - 不同的结果
【发布时间】:2012-02-23 09:43:22
【问题描述】:

我正在尝试在 python 中调用管道命令 (echo -e "HEAD / HTTP/1.0\n" | ncat -C localhost 80)。

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

预期结果(从 shell 运行该 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]

【问题讨论】:

    标签: python command call subprocess pipe


    【解决方案1】:

    您的\n 正在python 字符串中生成换行符。我假设您希望 echo 解释这一点。尝试将其设为原始字符串:

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

    这样,python 不会解释 '\n' 并且会被传递。

    【讨论】:

    • 是的,经过考虑,即使它是一个文字换行符,所以命令略有不同,换行符在双引号内,所以它仍然应该是输出中的换行符。
    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多