os.popen和scutil的问题

时间:2012-06-14 20:42:50

标签: python macos shell unix networking

我需要来自scutil命令的信息。当我在终端上运行scutil -d -r xyz.com时。我可以看到几行输出。 但是当我执行scutil -d -r xyz.com > file.txt时,只有最后一行命令输出可以在文件中看到flags = 0x00000002 (Reachable)

我从python运行这个命令,我需要这个命令的全部内容。 我在python中运行的方式是:

import os

output = os.popen('scutil -r -d yahoo.com').read()
print output

输出为:

  

flags = 0x00000002(Reachable)

但我也需要这里命令的所有输出。如果有任何解决方法,请告诉我。

3 个答案:

答案 0 :(得分:0)

scutilstderr打印信息,尝试使用&> file.txt代替> file.txt

在python中尝试使用:

import commands 
print commands.getstatusoutput("scutil -d -r xyz.com")

答案 1 :(得分:0)

os.popen is deprecated since 2.6
文档提供了使用os.popen模块替换subprocess的入门知识:
http://docs.python.org/library/subprocess.html#replacing-os-popen-os-popen2-os-popen3

应用于您的代码的示例:

import subprocess
my_process = subprocess.Popen('scutil -r -d yahoo.com', 
                              shell=True,
                              stdout=subprocess.PIPE, 
                              stderr=subprocess.PIPE)
out, err = my_process.communicate()
print out
print err

答案 2 :(得分:0)

您可以使用subprocess.check_output("scutil -d -r xyz.com", stderr=subprocess.STDOUT, shell=True)

import subprocess

output = subprocess.check_output("scutil -d -r xyz.com", stderr=subprocess.STDOUT, shell=True)
print(output)

您应该注意的check_output命令有两件事情发生:

  1. stderr=subprocess.STDOUT将错误输出流传输到标准输出
  2. shell=True通过shell执行命令。这使您可以访问运行shell进程的相同环境。