使Python脚本与xargs的工作(Making Python scripts work with

2019-09-20 23:42发布

什么是让我的Python脚本与“xargs的”正常工作的过程吗? 举例来说,我想下面的命令,通过文本文件的每一行的工作,并执行任意命令:

cat servers.txt | ./hardware.py -m 

从本质上讲想每行要传递给hardware.py脚本。

Answer 1:

为了让你的命令与工作xargs ,你只需要他们接受的论点。 在Python参数都在sys.argv列表。 通过这种方式,你可以执行的财产以后这样的:

find . -type f -name '*.txt' -print0 | xargs -0 ./myscript.py

这可能是相当于

./myscript.py ./foo.txt ./biz/foobar.txt ./baz/yougettheidea.txt

为了使您的命令标准输入工作,你也可以使用sys模块,此时sys.stdin ,这可以当作一个文件。 这更像是你给的例子:

./myscript.py < somefile.txt


Answer 2:

你是混淆了两个问题。

首先,你的应用程序可以从标准输入接收输入。 这有没有关系xargs 。 在你的榜样,所有hardware.py需要做的是阅读sys.stdin作为输入文件,例如:

if __name__=='__main__':
    for line in sys.stdin:
         do_something(line)

如果你想hardware.py产生输出的其他程序的路线都可以使用,只写sys.stdout

其次,应用程序可以从参数接收输入。 在这里,您将使用xargs 。 例如:

xargs的./hardware.py <servers.txt#一样的猫servers.txt | xargs的./hardware.py

这将通过servers.txt的每一个“字”(不是每 )作为参数传递给hardware.py(同时可能有多个参数)。 这将是与运行hardware.py word1 word2 word3 word4 ...

蟒存储命令在行参数sys.arvg阵列。 sys.argv[0]将是命令名,和sys.argv[1:]将是所有的命令行参数。 但是,您通常使用关闭处理您的命令行更好argparse



Answer 3:

这是不是很清楚,你想做的事。 如果./hardware.py -m从标准输入读取一行,您可以使用GNU并行分发这些线路:

cat servers.txt | parallel --pipe -N1 ./hardware.py -m

如果./hardware.py -m需要一台服务器作为参数,你可以这样做:

cat servers.txt | parallel ./hardware.py -m

您可以通过简单的安装GNU并行:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

留意GNU的介绍视频平行了解更多: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1



文章来源: Making Python scripts work with xargs
标签: python xargs