os.popen() 变量

1 投票
3 回答
9699 浏览
提问于 2025-04-16 07:50

我有一个比较复杂的应用程序……

为了简洁起见,这里是你需要知道的主要内容:

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('文件名:').lower

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

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

3 个回答

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
3

你的问题是你没有把一个字符串作为命令传递。修正后的调用方式是 popen()

os.popen('sudo tcpdump -c5 -vvv -w {0} host wiki or host wiki2'.format(file_name))
3

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

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

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

就是你的命令。

因为我们只需要调用 tcpdump 而不需要从中获取任何输出,所以我们使用 subprocess.call

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

当然,为什么它不工作要看具体的错误是什么,但这就是你应该采取的方式。如果你能更新答案,告诉我们你的错误,那就更清楚了。

撰写回答