如何将文件列表传递给Python子进程

时间:2015-01-08 23:27:07

标签: python unix subprocess

我正在尝试使用python在UNIX上执行系统可执行文件。我使用op.system()来执行此操作,但确实需要使用subprocess.call()。我的op.System调用如下:

os.system('gmsh default.msh_timestep%06d* animation_options.geo' %(timestep));

并且工作正常。它调用程序gmsh和gmsh读取default.msh_timestep%06d*中指定的一系列文件。然后我尝试使用子进程执行相同的操作,但是我收到错误,说文件不在那里。以下是子进程调用:

call(["gmsh", "default.msh_timestep%06d*" %(timestep), "animation_options.geo"],shell=True);

有谁知道这里会发生什么?我当然是一个Python菜鸟,所以这可能是一个愚蠢的问题。

1 个答案:

答案 0 :(得分:2)

Globbing由shell完成。在Python中,您需要自己完成。您可以使用glob.glob获取与模式匹配的文件列表:

import glob

call(["gmsh"] + glob.glob("default.msh_timestep%06d*" % (timestep,)) +
     ["animation_options.geo"])

如果你想使用shell=True,传递字符串而不是字符串列表:

call("gmsh default.msh_timestep%06d* animation_options.geo" % (timestep,), shell=True)