通配符的subprocesspopen参数
我写了一个方法,定义如下,并工作
def cmd_exec(cmd_tokens = []): p = subprocess.Popen(cmd_tokens, stdout=subprocess.PIPE,stderr=subprocess.PIPE) out, err = p.communicate() return (out, err)
我有一个常数为LOAD_IMAGES=['docker', 'load', '-i', 'my_img_file_101']
当我用LOAD_IMAGES
作为参数执行上面的方法时,它工作正常。 但是,文件名编号可能会改变,当我尝试使用通配符,我得到的错误。 当我有LOAD_IMAGES=['docker', 'load', '-i', 'my_img_file*']
,说我从Py / Bash得到一个错误open my_img_file*: no such file or directory
我如何使通配符工作。 在bash上直接执行命令works.I的意思是当我在bash上说这个时, docker load -i my_img_file*
通配符扩展是bash在shell中处理的东西。 这不是Linux / Unix内置的扩展通配符或任何语法的东西。 所以你需要明确这一点,并手动进行扩展。
还有一个替代scheme,实际上是让shell通过shell = True完成所有的工作。 它有其缺点,如问题中所述。 引用:
这是一件好事,请参阅子stream程文档的“常用参数”部分中的警告块。 它主要讨论安全含义,但也可以帮助避免愚蠢的编程错误(因为没有魔术shell字符担心)
我对shell = True的主要抱怨是它通常意味着有一个更好的方法去解决这个问题 – 用你的例子,你应该使用glob模块…
- 如何在运行期间将Jenkinspipe道脚本(Jenkinsfile)提供给在同一个jenkins实例上运行的每个作业?
- “dockerfile”文本文件忙
- docker – 组成了错误:bash:sails:找不到命令
- 在启动守护进程的Ubuntu 14.04上启用Docker Remote API
- Docker使用Team City Agent撰写DNS问题
- 缓冲区/caching耗尽Docker容器内的Spark独立
- 如何build立一个运行MySQL的Docker容器?
- Django + docker +周期性命令
- 使用Ansible,Jenkins和docker工具来构build快速的testing环境