好的,我已经找到了如何在Python中执行复杂的命令,这篇文章如何在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运行。
谢谢。
EDIT:按要求,循环是这样的:
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
。
假设在循环中inputfilename
和outputfilename
是保存您(resp.)输入和输出文件名称的两个变量,只需执行:
proc = subprocess.Popen(shlex.split('gr_cp -option=90') + [ inputfilename, outputfilename ])
(因为shlex.split
的输出是一个字符串列表,所以你可以只添加列表的最后一个成员…)