Python - 意外令牌附近的语法错误`|'

时间:2017-03-13 08:21:25

标签: python sh

我试图长时间修复以下错误,但无法找到此错误触发的原因。我尝试用直接日志文件名替换fileday1给出文件的总字数。

>>> 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()

1 个答案:

答案 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

这一切都很好。

正如其他人所说,这个剧本在其他方面也很差。