Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为每行运行脚本,并根据输出执行某些操作_Python_Linux_Bash - Fatal编程技术网

Python 为每行运行脚本,并根据输出执行某些操作

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%的需要

我有一个别人制作的Python脚本。在我的bash脚本中,我希望使用每一行作为参数,对txt文件中的每一行执行它。然后根据python脚本的输出,将该行添加到新的txt文件中

此刻我正在跑步

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
变量中。您还需要查看终端上的输出吗?