【问题标题】:os.popen() variablesos.popen() 变量
【发布时间】:2010-11-30 18:49:26
【问题描述】:

所以我有这个相当复杂的应用程序...... 简而言之,这是您应该了解的主要内容:

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

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

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

编辑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

【问题讨论】:

  • 用引号将您的 os.popen 参数括起来。

标签: python popen os.system


【解决方案1】:

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

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

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

是你的命令。

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

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

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

【讨论】:

  • 错误更多,它允许我输入“file_name”的原始数据,但实际上并没有保存它。
  • 让我看看子流程模块。
  • 是的,你应该这样做。 Python站点上的文档很好,但这里有另一个链接供进一步阅读:doughellmann.com/PyMOTW/subprocess
【解决方案2】:

您的问题是您没有将字符串作为命令传递。修复了对popen()的调用:

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

【讨论】:

    【解决方案3】:

    如果您运行的是较新版本的 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
    

    【讨论】:

    • 谢谢,我看看子流程模块
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多