我希望我的脚本位于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
命令外,还有其他方法。
答案 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')))