Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用docker将回显输入发送到stdin到docker容器_Python_Docker_Dockerfile_Docker Run_Python Docker - Fatal编程技术网

Python 使用docker将回显输入发送到stdin到docker容器

Python 使用docker将回显输入发送到stdin到docker容器,python,docker,dockerfile,docker-run,python-docker,Python,Docker,Dockerfile,Docker Run,Python Docker,下面是我的示例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; } 在pythonshell中,我尝试运行容器并传递参数,如图所示。得到结果,但x和y值

下面是我的示例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;
    }
在pythonshell中,我尝试运行容器并传递参数,如图所示。得到结果,但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实现这一点???

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

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

命令
选项可以是字符串或列表;如果使用列表(推荐),则需要手动将命令拆分为单独的单词,但完成此操作后,无需进一步转义。

它会引发什么错误?是否可以通过编辑(不在评论部分)向问题添加错误回溯?我的猜测是,这是因为您混淆了命令和入口点。尝试将entrypoint保留在外面,并设置
命令='echo“12”| build/c_executable'
client.containers.run(
  image='sample_c',
  command=['sh', '-c', 'echo "1 2" | /opt/c_build_dir/c_executable']
)