要在bash脚本中逐行读取的Python输出

时间:2017-07-17 20:50:33

标签: python bash loops lines

这里的基本思路是从每个curl调用中的asd目录调用1个文件,从output.txt文件调用1行:

#!/bin/bash
python MJD.py -> output.txt
FILES=/home/user/asd/*
for f in $FILES
do
filename="$output.txt"
while read -r line
do
curl -F ID='zero' -F dir="@$f" -F TIME="$line" -F outputFormat=json "http://blabla"
done
done

此代码实际调用python脚本并将输出保存在output.txt文件中。对于多行,输出文件在每行上只有1个数字。现在我要做的是从第一行开始,获取-F TIME =“文本文件中的一个值”。

我不知道我的代码的哪一部分导致了这个问题。当我调用这个脚本时,从dir调用文件的部分可以正常工作,但是每次在屏幕上显示TIME = 0时,看起来没有从output.txt文件中读取任何内容。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

这是process substitutionexec的好地方:

#!/bin/bash

exec 4< <( python MJD.py - )
# now, the output from the python script can be read from channel 4

for file in /home/user/asd/*; do
    IFS= read -u4 -r time              # get the next line from MJD.py
    curl -F ID='zero' -F dir="@$file" -F TIME="$time" -F outputFormat=json "http://blabla"
done

指定了exec“技巧”in the manual

  
    

exec [-cl] [-a name] [command [arguments]]

  
     

[...]如果未指定命令,则可以使用重定向来影响当前的shell环境。

答案 1 :(得分:0)

您没有在输出文件中输入内部循环,请尝试:

#!/bin/bash
python MJD.py > output.txt
FILES=/home/user/asd/*
for f in $FILES
do
filename="output.txt"
while read -r line
do
curl -F ID='zero' -F dir="@$f" -F TIME="$line" -F outputFormat=json "http://blabla"
done < "$filename"
done

虽然,既然您已经在使用Python,为什么不在Python中编写所有逻辑并在一个地方处理所有内容?