在我的python脚本中我做错了什么来获得输出?

时间:2012-09-05 07:59:25

标签: python

我认为这应该有效。我想得到这个命令的输出 每个标签的“grep -l%s * .py”%标签, 在带有标记名称的已创建文件上。

import os
import sys

results_dir = '/home/ks/one/work/tn/format-description 15852/results'
converters_dir = '/home/ks/one/work/cvr'
export_dir = '/home/ks/one/work/epr'
all_dirs = {'cvr':cvrs_dir, 
            'epr':eprs_dir}

tags = [tag.strip() for tag in open('new file').readlines()]
for coe, directory in all_dirs.items(): # coe - type of our file
    os.chdir(results_dir)
    for tag in tags:
        tag_file = open(coe + ' ' + tag, 'w')
        sys.stdout = tag_file
        os.chdir(directory)
        os.system("grep -l %s *.py" % tag)
        tag_file.close()

但是我在运行脚本时看到的所有内容 - 它都是在我的控制台中输出的。

2 个答案:

答案 0 :(得分:2)

使用Python的子进程模块

http://docs.python.org/library/subprocess.html

该文档包含大量文档和示例。

os.system()的另一个(差)选项是将输出重定向到文件

os.system('do_something >/tmp/myoutput')

然后再从Python中读取输出文件。然而这很难看 并且可能不太便携。

答案 1 :(得分:0)

我能想到的最小变化让你可以在python中获得输出是改变:

os.system("grep -l %s *.py" % tag)

有:

output = commands.getoutput("grep -l %s *.py" % tag)

这样,命令的输出将以输出变量结束。

我不确定为什么其他人会教条地告诉您更改代码以使用子进程;这将需要更多的重写。