0

下面是我的示例 c 程序

    #include <stdio.h>
    int main()
    {
      int x, y, z;
      scanf("%d%d", &x, &y);
      printf("%d,%d" ,x,y);
      z = x + y;
      printf("%d", z);
      return 0;
    }

我能够编译程序并构建图像(docker build -t sample_c .)。现在在运行容器时,我想将输入参数作为 echo 传递给容器。我如何使用 python docker 实现这一点

echo "1 2" | ./c_executable ( passing input values to executable file)

在 python shell 中,我试图运行容器并传递参数,如图所示。获得结果,但 x 和 y 值被视为一些随机数。

>>> import docker
>>> client = docker.from_env()
>>> client.containers.run(image='sample_c',command='echo "1 2" | ',entrypoint='/opt/c_build_dir/c_executable')
b'21911,14414231201441445031'
>>> client.containers.run(image='sample_c',command='echo "1 2" | /opt/c_build_dir/c_executable')
b'1 2 | /opt/c_build_dir/c_executable\n'

我如何使用 python docker 实现这一点?

4

1 回答 1

1

如果您的主容器进程使用任何 shell 功能(管道、重定向、环境变量扩展),您需要自己手动包含 shell。Bourne shellsh -c选项将运行单个内联命令。

client.containers.run(
  image='sample_c',
  command=['sh', '-c', 'echo "1 2" | /opt/c_build_dir/c_executable']
)

command选项可以是字符串或列表;如果您使用列表(推荐),那么您需要手动将命令分解为单独的单词,但这样做后,您无需进一步转义。

于 2020-03-03T12:10:00.123 回答