当 I/O 文件的名称必须更改时 Python 内的命令

Command inside Python when name of I/O files must change

好的,我已经找到了如何用这个 post how to run my own external command in python script

在 Python 中执行复杂的命令
import shlex
import subprocess
proc = subprocess.Popen(shlex.split('gr_cp -option=90 inputfilename outputfilename'))
proc.communicate()

它确实有效,但在我的例子中,我正在执行一个循环,并且 inputfilenameoutputfilename 的名称在每次迭代中都会发生变化。我已经尝试过该解决方案,但它不起作用,因为它无法识别 inputfilename.

在循环中,inputfilenamembr{:03}_20161110.grb1.format(i),其中i在从1到21的循环中是运行。

谢谢。

编辑: 按照要求,循环是这样的:

for i in range(1, 21):
    dn = './mbr{:03}'.format(i)
    inputfilename = 'mbr{:03}_2016111000.grb1'.format(i) 
    os.chdir(dn)
    #do some things copying and concatenating files
    proc = subprocess.Popen(shlex.split('gr_cp -option=90 inputfilename outfilename'))
    proc.communicate()
    os.chdir('..')

循环探索目录 mbr001mbr020 并将 inputfile 命名为每个父目录。

gr_cp 是一个命令行工具,可以从 inputfilenameoutputfilename 中提取一些变量(就像一个过滤器)。它与任何其他 shell 命令一样。问题是在循环中它无法识别 inputfilename.

假设在循环内 inputfilenameoutputfilename 是 2 个变量保存你的名字(resp.)输入和输出文件,只需做:

proc = subprocess.Popen(shlex.split('gr_cp -option=90') + [ inputfilename, outputfilename ])

(因为shlex.split的输出是一个字符串列表,所以你可以只添加列表的最后一个成员...)