当I / O文件的名称必须更改时,在Python内部执行命令

时间:2016-11-14 16:31:17

标签: python shell subprocess shlex

好的,我已经找到了如何使用这篇文章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('..')

循环将目录mbr001探索到mbr020,并将inputfile命名为每个父目录。

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

1 个答案:

答案 0 :(得分:1)

假设循环内部inputfilenameoutputfilename是包含你(resp。)输入和输出文件名称的2个变量,只需执行:

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

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