2024-06-28 16:20:27 发布
网友
让我的Python脚本与“xargs”一起正常工作的过程是什么?例如,我希望下面的命令能够遍历每一行文本文件,并执行任意命令:
cat servers.txt | ./hardware.py -m
基本上希望将每一行传递给hardware.py脚本。
你混淆了两个问题。
首先,您的应用程序可以接收来自stdin的输入。这与xargs无关。在您的示例中,只需将hardware.py读取为输入文件,例如:
xargs
hardware.py
if __name__=='__main__': for line in sys.stdin: do_something(line)
如果您希望hardware.py生成其他程序可以使用的输出,只需写入sys.stdout
sys.stdout
其次,应用程序可以从参数接收输入。在这里您可以使用xargs。例如:
xargs./hardware.py<;servers.txt与cat servers.txt相同
这将把servers.txt的每个“word”(不是每个行)作为一个参数传递给hardware.py(可能一次传递多个参数)。这将与运行hardware.py word1 word2 word3 word4 ...相同
hardware.py word1 word2 word3 word4 ...
Python在sys.arvg数组中存储命令行参数。sys.argv[0]将是命令名,sys.argv[1:]将是所有命令行参数。但是,通常最好使用^{}处理命令行。
sys.arvg
sys.argv[0]
sys.argv[1:]
要使您的命令与xargs一起工作,您只需要它们接受参数。Python中的参数在sys.argv列表中。通过这种方式,您可以执行如下操作:
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模块,可以将其视为文件。这更像你举的例子:
sys
sys.stdin
./myscript.py < somefile.txt
你想做什么还不太清楚。如果./hardware.py -m从标准输入读取一行,则可以使用GNU Parallel来分配这些行:
./hardware.py -m
cat servers.txt | parallel --pipe -N1 ./hardware.py -m
如果./hardware.py -m接受单个服务器作为参数,则可以执行以下操作:
cat servers.txt | parallel ./hardware.py -m
您可以通过以下方法安装GNU Parallel:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel chmod 755 parallel cp parallel sem
观看GNU Parallel的简介视频以了解更多信息: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
你混淆了两个问题。
首先,您的应用程序可以接收来自stdin的输入。这与
xargs
无关。在您的示例中,只需将hardware.py
读取为输入文件,例如:如果您希望hardware.py生成其他程序可以使用的输出,只需写入
sys.stdout
其次,应用程序可以从参数接收输入。在这里您可以使用
xargs
。例如:xargs./hardware.py<;servers.txt与cat servers.txt相同
这将把servers.txt的每个“word”(不是每个行)作为一个参数传递给hardware.py(可能一次传递多个参数)。这将与运行
hardware.py word1 word2 word3 word4 ...
相同Python在} 处理命令行。
sys.arvg
数组中存储命令行参数。sys.argv[0]
将是命令名,sys.argv[1:]
将是所有命令行参数。但是,通常最好使用^{要使您的命令与
xargs
一起工作,您只需要它们接受参数。Python中的参数在sys.argv
列表中。通过这种方式,您可以执行如下操作:可能相当于
要使命令与标准输入一起工作,还可以使用
sys
模块,这次使用sys.stdin
模块,可以将其视为文件。这更像你举的例子:你想做什么还不太清楚。如果
./hardware.py -m
从标准输入读取一行,则可以使用GNU Parallel来分配这些行:如果
./hardware.py -m
接受单个服务器作为参数,则可以执行以下操作:您可以通过以下方法安装GNU Parallel:
观看GNU Parallel的简介视频以了解更多信息: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
相关问题 更多 >
编程相关推荐