将通配符参数从 bash 传递到 python

passing wildcard arguments from bash into python

我正在尝试使用 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 是我遇到的问题,我有点不确定如何创建文件列表)

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

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

for file in *; do python script.py "$file"; done

这将为匹配 glob * 的每个文件调用一次脚本。

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

from sys import argv
for filename in argv[1:]:
    # rest of script

然后从 bash 调用您的脚本,如 python script.py * 以将所有文件作为参数传递。 argv[1:] 是一个数组切片,其中 returns 包含从 argv 从位置 1 到数组末尾的元素的列表。

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