将bash中的通配符参数传递给python

时间:2015-05-15 10:21:07

标签: python bash scripting arguments

我试图通过编写一个简单的脚本来练习python脚本,该脚本将采用名为A_B的大量文件并将它们写入B \ A位置。我将参数传递给文件的方式是

python script.py *

我的程序看起来像

from sys import argv
import os
import ntpath
import shutil

script, filename = argv

target = open(filename)

outfilename = target.name.split('_') 

outpath=outfilename[1]
outpath+="/"
outpath+=outfilename[0]

if not os.path.exists(outfilename[1]):
    os.makedirs(outfilename[1])

shutil.copyfile(target.name, outpath)

target.close()

问题在于,此脚本的当前编写方式设置为一次只接受1个文件。最初我希望通配符一次将一个文件传递给脚本,然后每次都执行脚本。

我的问题包括两种情况:

  1. 我怎样才能将通配符文件一次一个地传递给脚本。
    1. 如何修改此脚本以接受所有参数? (我可以处理列表 - 但是argv是我遇到的问题,而且我对如何创建文件列表有些不确定)

1 个答案:

答案 0 :(得分:3)

您有两个选项,两个选项都涉及循环。

要逐个传递文件,请使用shell循环:

Foreground

这将为匹配glob for file in *; do python script.py "$file"; done 的每个文件调用一次脚本。

要处理脚本中的多个文件,请改为使用循环:

*

然后从像from sys import argv for filename in argv[1:]: # rest of script 这样的bash调用脚本,将所有文件作为参数传递。 python script.py *是一个数组切片,它返回一个列表,其中包含argv[1:]中从位置1开始到数组末尾的元素。

我建议使用后一种方法,因为这意味着您只调用脚本的一个实例。