xargs,python,从标准输入读取文件
在包含 30 个 CSV 文件的目录中,运行:
find . -name "*.csv" | (xargs python ~/script.py)
如何让 python 在 xargs
传递的每个文件上正确运行?我打印 sys.stdin ,它只是一个文件。我尝试 for file in stdin
循环,但那里什么也没有。我缺少什么?
In a directory with 30 CSV files, running:
find . -name "*.csv" | (xargs python ~/script.py)
How can I have python properly run on each file passed by xargs
? I do print sys.stdin
and it's just one file. I try for file in stdin
loop, but there's nothing there. What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
事实上 xargs 不会传递给 stdin。它将所有从 stdin 读取的内容作为参数传递给您在参数中给出的命令。
您可以使用 echo 来调试命令调用:
您将看到所有文件都输出在一行上。
因此,实际上要从 python 中的参数列表访问文件,请在脚本中使用以下命令:
In fact xargs does not pass to stdin. It passes all its read from stdin as arguments to the command you give it in parameter.
You can debug your command invokation with an echo:
You will see all your files outputed on one line.
So in fact to access your files from arguments list in python use this in your script:
script.py 为每个 csv 文件运行一次
,等等
如果你想像
那么
运行它或者
(“可能需要转义,不确定)
编辑:注意`和'之间的区别
script.py is being run exactly once for each csv file
etc
If you want to run it like
then do
or
(the " may have to be escaped, not sure)
EDIT: note the difference between ` and '