如何使子进程语句在os.walk(path)下执行

时间:2015-09-02 20:17:44

标签: python

我希望我的脚本位于os.walk()中提到的特定文件路径下,然后对该位置下的所有文件执行grep命令,并将输出重定向到文件。下面是我创建的脚本,但subprocess在当前目录下执行ls -al命令,但print声明显示os.walk的内容。所以我需要subprocess来执行os.walk路径下的命令。

  with open('ipaddressifle.out', 'w') as outfile:
     for pdir, dir, files in os.walk(r'/Users/skandasa/perforce/projects/releases/portal-7651'):
         for items in files:
             print(items)
             #subprocess.call(['ls', '-al'])
         process = subprocess.Popen(['ls', '-al'], shell= True, stdout=outfile, stderr=outfile)
         #process = subprocess.Popen(['grep', 'PORTALSHARED','*', '|', 'awk', '-F', '[','{print', '$1}'], shell= True, stdout=outfile, stderr=outfile)
         [output, err] = process.communicate()

除了向cd电话添加subprocess命令外,还有其他方法。

1 个答案:

答案 0 :(得分:2)

您可以使用os.chdir(path)更改当前的工作目录。

我重写了你的代码片段以使用subprocess.check_output来调用命令并检索它的标准输出。我还使用shlex.split(command)在单个字符串中编写命令,并为Popen正确拆分。

脚本执行os.walk(DIRECTORY)并将ls -la的每个子目录的输出写入OUTPUT_FILE

import os
import shlex
from subprocess import check_output


DIRECTORY = '/tmp'
OUTPUT_FILE = '/tmp/output.log'


with open(OUTPUT_FILE, 'w') as output:
    for parent, _, _ in os.walk(DIRECTORY):
        os.chdir(parent)
        output.write(check_output(shlex.split('ls -al')))