아래 오류를 오랫동안 수정하려고했지만이 오류가 발생하는 이유를 찾을 수 없습니다. 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()
이것은 shell
not python
. 구문 오류는 다음에서 발생합니다 sh
.
sh: -c: line 1: syntax error
관찰 한대로 공백을 제거하면 문제가 해결됩니다.
무슨 일이 일어나고 있는지 첫 번째 출력이 Python 문자열로 os.popen()
할당 file
되고 해당 문자열에 종료 줄 바꿈이 포함됩니다. 그 이유는 명령의 출력에 종료 줄 바꿈이 포함되기 때문입니다.
그래서 file
문자열 "foo-access.0\n"
이나 비슷한 것입니다.
즉, 두 번째 os.popen()
로 전송 된 명령 이
sudo cat foo-access.0
| wc -l
유효한 셸 구문이 아닙니다 (일반적으로 파이프,, |
줄을 시작할 수 없음).
공백을 제거하면 후행 줄 바꿈이 제거되므로 두 번째 명령 os.popen()
은 다음과 같습니다.
sudo cat foo-access.0 | wc -l
모두 좋습니다.
다른 사람들이 언급했듯이이 스크립트는 다른면에서도 좋지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다