Python 为每行运行脚本,并根据输出执行某些操作
我有一个别人制作的Python脚本。在我的bash脚本中,我希望使用每一行作为参数,对txt文件中的每一行执行它。然后根据python脚本的输出,将该行添加到新的txt文件中 此刻我正在跑步Python 为每行运行脚本,并根据输出执行某些操作,python,linux,bash,Python,Linux,Bash,我有一个别人制作的Python脚本。在我的bash脚本中,我希望使用每一行作为参数,对txt文件中的每一行执行它。然后根据python脚本的输出,将该行添加到新的txt文件中 此刻我正在跑步 sudo python tester.py 10.0.1.1 999 user pass 其中,“10.0.1.1 999用户通行证”将是我的txt文件中的一行 如果成功了,它会说“成功!”。这是我想将该行复制到新文件的地方 现在,为了使它更复杂,我想根据行的开头更改python脚本。这不是100%的需要
sudo python tester.py 10.0.1.1 999 user pass
其中,“10.0.1.1 999用户通行证”将是我的txt文件中的一行
如果成功了,它会说“成功!”。这是我想将该行复制到新文件的地方
现在,为了使它更复杂,我想根据行的开头更改python脚本。这不是100%的需要,但节省了我之前的txt文件
如果行以“10”开头,则使用脚本1。如果以“192”开头,则使用脚本2。两者都有相同的“成功!”输出
我试过这个
cat list.txt | while read line
do
python tester.py $line
if $(...) == "S"*
then
$line >> good.txt
fi
done
但有些地方不对劲
希望这对有人能帮助我有足够的意义
Chris通过引用
$line
可以将行中的所有单词组合成一个参数,但是Python脚本需要4个单独的参数
您应该将行的第一个字段读入它自己的变量中,这样您就可以测试它以决定运行哪个脚本
然后将脚本的输出分配给一个变量,对照success测试它代码>,如果匹配,则写入输出文件
while read -r ip rest
do
case "$ip" in
10.*) script=tester.py ;;
192.*) script=tester2.py ;;
*) echo "IP $ip doesn't start with 10 or 192";
exit;;
esac
result=$(sudo python $script $ip $rest)
if [[ $result == SUCCESS* ]]
then
echo "$ip $rest"
fi
done < list.txt > good.txt
读取时-r ip rest
做
中的“$ip”案例
10.*)脚本=tester.py;;
192.*)script=tester2.py;;
*)echo“IP$IP不是以10或192开头”;
出口
以撒
结果=$(sudopython$script$ip$rest)
如果[[$result==SUCCESS*]]
然后
echo“$ip$rest”
fi
完成good.txt
将参数作为不同的元素传递
while read -a line
do python tester.py "${line[@]}"
done < list.txt > log.txt 2>&1
读取时-一行
执行python tester.py“${line[@]}”
完成log.txt 2>&1
这也将在不启动无意义的cat
的情况下读取文件,并记录输出。根据需要编辑详细信息
您还可以在${line[0]}上使用case语句来确定要运行的程序。StackOverflow不是免费的编码服务。所以我希望你能。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并使用:)使用while read
循环将文件逐行读取到变量中。您可以测试第一个变量来决定运行哪个python脚本。然后运行脚本,将变量作为参数传递。使用$(…)
捕获输出,使用if
语句测试它是否成功代码>然后写入文件。没有什么比基本的shell脚本更重要的了。哪一部分让你困惑?我还是个初学者。从例子中我知道的很少。我在读取line;do python tester.py“$line”;done”时尝试了这个“cat list.txt”,但没有任何打印内容,没有将$line
放在引号中。python脚本需要4个独立的参数,这将把整行作为一个参数来组合。当我尝试它时,我在“脚本中有Windows CRLF换行符”中得到“test.sh:第4行:意外标记附近的语法错误”\r''est.sh:第4行:
case“$ip”。使用dos2unix
来修复它。谢谢,我肯定错过了。在记事本++中更改了它。我只是在输出中得到打印错误。回答以“成功”开头,但后面还有一些废话。我想加一颗星星就可以了?像这样的if[[$result==SUCCESS*]
。值得一提的是,python脚本没有打印任何内容。它是用我的第一次尝试打印的(在你告诉我去掉引号之后),但不是用你给我的。脚本的所有输出都放在result
变量中。您还需要查看终端上的输出吗?