os.popen() 变量
我有一个比较复杂的应用程序……
为了简洁起见,这里是你需要知道的主要内容:
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())
当然,为什么它不工作要看具体的错误是什么,但这就是你应该采取的方式。如果你能更新答案,告诉我们你的错误,那就更清楚了。