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

2024-09-29 01:26:44 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我已经发现了如何使用这个posthow 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


Tags: inimport命令formatproccpsplitoption
1条回答
网友
1楼 · 发布于 2024-09-29 01:26:44

假设在循环inputfilenameoutputfilename中有两个变量,分别保存输入和输出文件的名称,只需执行以下操作:

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

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

相关问题 更多 >