首页 > 解决方案 > 在 bash 脚本中执行的 Python 脚本。错误未输出到日志文件

问题描述

基本上,我有一个针对网页运行的 python 脚本,如果找到,它会输出一个电话号码联系人。

我要编写的是一个 bash 脚本,它可以在 url 列表中自动使用它。它将结果保存到一个文件中,这样我就可以看到哪些 url 产生了电话号码联系人,哪些 url 没有。我希望它在同一个 txt 文件中,每个 url 结果在不同的行上,以便我可以推断出哪些 url 产生了哪些结果。例如

 $cat log.txt
 HTTPError: 404
 224 265 899
 HTTPError: 404
 847 718 9300, + 1, 662 538 6500

问题是当我运行我的 bash 脚本时,http 错误会打印到屏幕上,而电话号码会打印到日志文件中。这意味着我无法推断出哪些网址产生了哪些结果。

所以目前我的 bash 脚本将一个 URLS.txt 文件读入一个数组。然后将脚本命令添加到数组中每个 url 的开头。然后使用 for 循环,执行每个命令..

我试图寻找一种在每次执行 python 命令时向 log.txt 的每一行添加一个字符串但没有运气的方法。如果我能做到这一点,我就不需要错误,因为我可以推断出哪些 url 不起作用,因为每一行上都会有没有产生结果的字符串。

因此,如果我将字符串设置为“无”?log.txt 看起来像这样

 none?
 none? 224 265 899
 none?
 none? 847 718 9300, + 1, 662 538 6500

这是我将 URL 放入数组后的代码。

 scr1="python3 extract.py " 
 scr1arr1=( "${array1[@]/#/$scr1}" )
 for each1 in "${scr1arr1[@]}"
 do
 $each1 >> log.txt
 done

所以这就是我执行脚本时屏幕上发生的事情。

 HTTPError: 404
 HTTPError: 404 

log.txt 看起来像这样

 224 265 8990, 
 847 718 9300, + 1, 662 538 6500

我做错了吗?/ 以错误的方式解决问题??我确实花了几天时间试图解决这个问题,我正在为此失眠!我对编码很陌生,很抱歉,如果这已经涵盖了。我已经搜索了很多论坛,但无法找到解决方案。

标签: arrayspython-3.xbashoutput

解决方案


您的脚本显然将错误打印到标准错误,而不是标准输出,因此您需要添加2>&1以将标准错误重定向到与标准输出相同的文件。试试这个:

 for each1 in "${scr1arr1[@]}"
 do
    "$each1"
 done > log.txt 2>&1

推荐阅读