Python-意外标记`';
我试图修复下面的错误很长时间,但无法找到触发此错误的原因。我尝试用直接日志文件名替换Python-意外标记`';,python,sh,Python,Sh,我试图修复下面的错误很长时间,但无法找到触发此错误的原因。我尝试用直接日志文件名替换文件,并且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
文件
,并且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()
这确实是
shell
而不是python
的问题。语法错误来自sh
:
sh: -c: line 1: syntax error
正如您所观察到的,删除空白可以解决您的问题
发生的情况是,第一个os.popen()
的输出作为Python字符串分配给文件
,该字符串包含一个终止换行符。
这是因为命令的输出包含一个终止换行符
因此文件
将是字符串“foo access.0\n”
或类似的内容
这意味着发送到第二个os.popen()
的命令是
sudo cat foo-access.0
| wc -l
sudo cat foo-access.0 | wc -l
这是无效的shell语法(通常,管道,|
,不能开始一行)
删除空格将删除尾随的换行符,因此发送到第二个os.popen()
的命令是
sudo cat foo-access.0
| wc -l
sudo cat foo-access.0 | wc -l
这很好
正如其他人所指出的,这个脚本在其他方面也很糟糕。您的引号是错误的。` | `如果只是调用
ls
,grep
,awk
,你甚至不应该使用python。。。创建一个真正的shell或者用python本机实现。我看不出我在代码中提到过这个“|”。我在@umuttoprint“sudo cat%s | wc-l”%x
中遗漏了什么吗?请检查您试图在那里执行的确切命令。它的语法无效。谢谢你的建议