如何将文件列表传递给 Python 子进程
How to pass list of files into Python 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 菜鸟,所以这可能是个愚蠢的问题。
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)
我正在尝试使用 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 菜鸟,所以这可能是个愚蠢的问题。
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)