gpt4 book ai didi

python - 如何在 python 中运行这个 shell 脚本?

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:56 25 4
gpt4 key购买 nike

我想从 python 程序运行 bash 脚本。该脚本有这样的命令:

find . -type d -exec bash -c 'cd "$0" && gunzip -c *.gz | cut -f 3 >> ../mydoc.txt' {} \;

通常我会运行一个子进程调用:

subprocess.call('ls | wc -l', shell=True)

但由于引号的缘故,这在这里是不可能的。有什么建议吗?

谢谢!

最佳答案

虽然问题已经得到解答,但我仍然会插话,因为我假设您想要执行该 bash 脚本,因为您没有功能等效的 Python 代码(基本上少于 40 行,见下文)。为什么这样做而不是 bash 脚本?

  • 您的脚本现在可以在任何具有 Python 解释器的操作系统上运行
  • 功能更易于阅读和理解
  • 如果您需要任何特殊的东西,调整您自己的代码总是更容易
  • 更像 Pythonic :-)

请记住(作为您的 bash 脚本)没有任何类型的错误检查,输出文件是一个全局变量,但可以轻松更改。

import gzip
import os

# create out output file
outfile = open('/tmp/output.txt', mode='w', encoding='utf-8')

def process_line(line):
"""
get the third column (delimiter is tab char) and write to output file
"""
columns = line.split('\t')
if len(columns) > 3:
outfile.write(columns[3] + '\n')

def process_zipfile(filename):
"""
read zip file content (we assume text) and split into lines for processing
"""
print('Reading {0} ...'.format(filename))
with gzip.open(filename, mode='rb') as f:
lines = f.read().decode('utf-8').split('\n')
for line in lines:
process_line(line.strip())


def process_directory(dirtuple):
"""
loop thru the list of files in that directory and process any .gz file
"""
print('Processing {0} ...'.format(dirtuple[0]))
for filename in dirtuple[2]:
if filename.endswith('.gz'):
process_zipfile(os.path.join(dirtuple[0], filename))

# walk the directory tree from current directory downward
for dirtuple in os.walk('.'):
process_directory(dirtuple)

outfile.close()

关于python - 如何在 python 中运行这个 shell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45697389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com