【问题标题】:using xargs (or sth else?) to sequentially execute a python script使用 xargs (或其他?)顺序执行 python 脚本
【发布时间】:2017-02-13 12:18:58
【问题描述】:

这个问题几乎与this question 重复,但几乎没有,没有一个答案符合我想要达到的目标。

我想做以下事情:有一个文件名列表,使用每个文件名顺序执行一个 python 脚本(!)。现在,我知道我可以轻松地解析我的 python 脚本中的文件名列表并在每一行执行任何函数,但这里的想法是我想将批处理执行的灵活性移到 shell,并保持我的 python 脚本不变。

所以我的参数文件如下所示:

$ cat arglist
1                  # <- separated by newlines
2
3
4

python 脚本:

import sys
print("args received:",sys.argv)

我试过了:

$ cat arglist | xargs python ./pyxargs.py -a -b -c
args received: ['./pyxargs.py', '-a', '-b', '-c', '1', '2', '3', '4']

但我想要实现的是以下

args received: ['./pyxargs.py', '-a', '-b', '-c', '1']
args received: ['./pyxargs.py', '-a', '-b', '-c', '2']
args received: ['./pyxargs.py', '-a', '-b', '-c', '3']
args received: ['./pyxargs.py', '-a', '-b', '-c', '4']

我猜 xargs 的工作方式让我很困惑。或者它只是错误的工具,总是组合参数并执行单个执行,而不是单独执行?如果是,xargs 的合适替代方案是什么?

感谢您的帮助

【问题讨论】:

  • 只需将 -n 1 添加到 xargs 调用中
  • 非常感谢,这行得通!

标签: python xargs


【解决方案1】:

尝试使用-I

&lt; arglist xargs -I file python ./pyxargs.py -a -b -c file

请注意,如果您的任何文件名包含换行符,这将失败,但这是尝试在文本文件中记录文件名所固有的,因此这可能不会成为问题。

【讨论】:

  • 使用 -I,根据文档“不带引号的空格不会终止输入项;而是分隔符是换行符”。这比使用 -n 更安全,因为它将处理名称中带有空格的文件名(但不是换行符)。
  • 虽然文档中更相关的引用是“为每个输入行执行实用程序”,但在某些 Linux 发行版的手册页中没有出现这一行。
猜你喜欢
  • 1970-01-01
  • 2021-07-03
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
相关资源
最近更新 更多