0

所以我有这个相当复杂的应用程序......为了简短起见,这是你应该知道的主要事情:

file_name = raw_input("Name your file:").lower()

os.popen(sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2)

但这似乎不起作用。我可以得到修复吗?谢谢,Pastelinux

编辑1:好吧,这就是我现在所拥有的,但它不起作用,关于如何修复的任何指示?

import subprocess, os, sys

filename = raw_input('File name:').lower

pipe = os.popen("sudo tcpdump -c5 -w", 'filename')

pipe = popen("sudo tcpdump -c5 -w", shell=True, stdout=PIPE).stdout

4

3 回答 3

3

不要使用 `os.popen',你应该使用 subprocess模块

我假设这个(一个字符串):

sudo tcpdump -c5 -vvv -w "file_name" host wiki or host wiki2

是你的命令。

由于我们只需要调用 tcpdump 而不会从中获取任何输出,因此我们使用subprocess.call

>>> subprocess.call(your_command.split())

当然为什么它不起作用取决于错误是什么,但这是你应该如何去做的。如果你可以用你的错误更新答案,那么它就很清楚了。

于 2010-11-30T18:55:13.080 回答
2

您的问题是您没有将字符串作为命令传递。固定调用popen()

os.popen('sudo tcpdump -c5 -vvv -w {0} host wiki or host wiki2'.format(file_name))
于 2010-11-30T18:57:59.493 回答
0

如果您正在运行较新版本的 Python,请使用 subprocess 模块。

请参阅 os.popen 的替换详细信息:

它说:在 Unix 上,os.popen2、os.popen3 和 os.popen4 也接受一个序列作为要执行的命令,在这种情况下,参数将直接传递给程序而无需 shell 干预。

pipe = os.popen("cmd", 'r', bufsize)
==>
pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
于 2010-11-30T18:56:04.997 回答