我试图长时间修复以下错误,但无法找到此错误触发的原因。我尝试用直接日志文件名替换file
,day1
给出文件的总字数。
>>> import os
>>> ports =["1080"]
>>> os.chdir("/var/logs")
>>> for i in range(0, len(ports)):
... file = os.popen("ls -al |grep -i access|grep -w %s.0|awk \'{print $9}\'" %ports[i]).read()
... day1 = os.popen("sudo cat %s|wc -l" %file).read()
...
sh: -c: line 1: syntax error near unexpected token `|'
sh: -c: line 1: `|wc -l'
非常感谢任何帮助。
答案:
问题是由空格引起的。删除空格可以解决问题。
file = os.popen("ls -al |grep -i access|grep -w %s.0|awk \'{print $9}\'" %ports[i]).read().strip()
答案 0 :(得分:2)
这shell
而不是python
确实存在问题。语法错误来自sh
:
sh: -c: line 1: syntax error
正如您所见,删除空格会解决您的问题。
正在发生的事情是,第一个os.popen()
的输出作为Python字符串分配给file
,该字符串包含终止换行符。
这是因为命令的输出包括终止换行符。
因此file
将是字符串"foo-access.0\n"
或类似的东西。
这意味着发送到第二个os.popen()
的命令是
sudo cat foo-access.0
| wc -l
这是无效的shell语法(通常是管道,|
,无法开始一行)。
删除空格会删除尾随换行符,因此发送到第二个os.popen()
的命令是
sudo cat foo-access.0 | wc -l
这一切都很好。
正如其他人所说,这个剧本在其他方面也很差。