好的,我已经找到了如何使用这篇文章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()
它确实有效,但在我的情况下,我正在执行循环,并且每次迭代中inputfilename
和outputfilename
的名称都会发生变化。我尝试过该解决方案,但由于无法识别inputfilename
而无效。
在循环中,inputfilename
为mbr{: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
。
答案 0 :(得分:1)
假设循环内部inputfilename
和outputfilename
是包含你(resp。)输入和输出文件名称的2个变量,只需执行:
proc = subprocess.Popen(shlex.split('gr_cp -option=90') + [ inputfilename, outputfilename ])
(因为shlex.split
的输出是一个字符串列表,所以你可以只添加列表的最后一个成员...)