什么是让我的Python脚本与“xargs的”正常工作的过程吗? 举例来说,我想下面的命令,通过文本文件的每一行的工作,并执行任意命令:
cat servers.txt | ./hardware.py -m
从本质上讲想每行要传递给hardware.py脚本。
什么是让我的Python脚本与“xargs的”正常工作的过程吗? 举例来说,我想下面的命令,通过文本文件的每一行的工作,并执行任意命令:
cat servers.txt | ./hardware.py -m
从本质上讲想每行要传递给hardware.py脚本。
为了让你的命令与工作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
你是混淆了两个问题。
首先,你的应用程序可以从标准输入接收输入。 这有没有关系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
。
这是不是很清楚,你想做的事。 如果./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