【问题标题】:Python subprocess piping to stdinPython 子进程管道到标准输入
【发布时间】:2016-03-10 00:08:12
【问题描述】:

我正在尝试使用 python Popen 来实现使用命令行的效果。

 echo "hello" | docker exec -i $3 sh -c 'cat >/text.txt'

目标是将“hello”文本通过管道传输到docker exec 命令中,并将其写入 docker 容器。

我已经尝试过了,但似乎无法正常工作。

import subprocess
from subprocess import Popen, PIPE, STDOUT

p = Popen(('docker', 'exec', '-i', 'nginx-ssl', 'sh', '-c', 'cat >/text.txt'), stdin=subprocess.PIPE)
p.stdin.write('Hello')
p.stdin.close()

【问题讨论】:

  • 它是如何工作的?它会产生一个空文件吗?根本没有文件?错误信息?
  • 根本没有文件。不过没有错误。
  • 什么是“码头工人”?你有它的文档链接吗?
  • 只是一个提示(因为我没有安装docker):1)使用communicate('Hello')而不是stdin.write并且不要关闭标准输入。另外,请确认您对根目录有写权限,如果没有,请尝试将>/text.txt 替换为>text.txt

标签: python subprocess stdin popen


【解决方案1】:

您还需要给stdin 新行:

p.stdin.write('Hello\n')

即使sys.stdout 也是如此。您不需要给print 一个新行,因为它会为您执行此操作,但是您手动执行的任何写入文件的操作都需要包含它。不过,您应该改用p.communicate('Hello')。就是为此而生的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2019-03-17
    相关资源
    最近更新 更多