通配符的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模块…