我想运行tcpdump参数:-n“(dst port 515或dst port 9100)” - w capture.cap
当我尝试做的时候:
dump = subprocess.check_output(["tcpdump",'-n "(dst port 515 or dst port 9100)" -w capture.cap'])
我得到例外:
subprocess.CalledProcessError: Command '['tcpdump', '-n "(dst port 515 or dst port 9100)" -w capture.cap']' returned non-zero exit status 1
使用1个参数可以正常工作。 另一个问题是如何获得此命令的输出,因为它似乎不停地运行。
此代码不起作用:
p = subprocess.Popen(('sudo', 'tcpdump', '-l -n "(dst port 515 or dst port 9100)"'), stdout=subprocess.PIPE)
for row in iter(p.stdout.readline, b''):
print row.rstrip() # process here
由于
答案 0 :(得分:1)
你必须为每个项目传递一个参数,而不是引号:
subprocess.check_output(['tcpdump', '-n', '(dst port 515 or dst port 9100)', '-w', 'capture.cap'])
check_output()
不是shell(除非你传递shell=True
,但在你的情况下这不是必需的):它不会为你分割参数,也不会解释被引用的字符串你。
请务必阅读subprocess.run()
的文档并查看示例。
顺便说一下,除了CalledProcessError
例外,你也应该收到这个错误:
tcpdump: invalid option -- ' '
这是一个有用的暗示:它在-n
之后抱怨空间。