我有一个以下格式的文件:
"192.168.2.1" "80"
"172.16.1.1" "443"
"10.1.1.1" "8080"
其中包含多个本地 IP,我正在尝试使用 xargs 运行带有线程的脚本来执行以下命令:
cat local-IPs.txt|xargs -I % -P 100 python script.py % "execute command"
我现在面临的问题是,由于 local-IPs.txt 文件包含“IP”和“端口”,xargs 命令无法同时采用(IP 和 PORT)。
任何帮助都将非常感谢,谢谢。
答案1
如果可以的话,编辑script.py
一下知识产权和港口作为其最后一个参数。然后您可以使用-n
(或-L
)选项xargs
:
<local-IPs.txt xargs -n 2 -P 100 python script.py "execute command"
(无用地使用cat
已删除。
要清楚的是,它将执行类似如下的操作
python script.py "execute command" 192.168.2.1 80
因此,script.py
期待这种形式至关重要。即使你不能修改script.py
它本身,也许你可以复制它并使用该副本。
另一种方法是让xargs
spawn 成为一个 shell,它的唯一任务就是改变参数的顺序。这应该适用于未修改 script.py
:
<local-IPs.txt xargs -n 2 -P 100 sh -c 'exec python script.py "$1" "$2" "execute command"' xargs-sh
sh
每个都会有一个python
。这可能会大大降低性能。
注意现在单引号里面有双引号。知道这一点很有用它如何影响参数和变量的扩展,尤其是如果execute command
包含一些(您的评论表明它没有,但一般来说它可能)。
xargs-sh
被解释这里。