gpt4 book ai didi

python - 如何在 python 中使用 linux 命令和 python 函数 (sys.argv)

转载 作者:太空宇宙 更新时间:2023-11-04 11:17:16 25 4
gpt4 key购买 nike

在我的 python 脚本中,我需要使用“awk”,但我想使用 sys.argv 传递文件。我现在的代码是这样的:

import sys
import os

cmd="awk '/regex/ {print}' sys.argv[1] | sed 's/old/new/g'"
x=os.popen(cmd).read()

现在的问题是“sys.argv”是 python 的东西,但 cmd 变量使用的是 linux 命令。所以我的问题是 - 有什么方法可以在我的 linux 命令中包含 sys.argv 吗?

最佳答案

您真的不需要为此使用 Awk 或 sed。 Python 可以原生地、优雅地、灵活地、稳健地、自然地完成这些事情。

import sys
import re

r = re.compile(r'regex')
s = re.compile(r'old')

with open(sys.argv[1]) as input:
for line in input:
if r.search(line):
print(s.sub('new', line))

如果您真的真的想为某些事情使用子进程,只需使用 Python 的通用字符串插值函数,您需要将 Python 变量的值插入到字符串中。

import subprocess
import sys
import shlex

result = subprocess.run(
"""awk '/regex/ {print}' {} |
sed 's/old/new/g'""".format(shlex.quote(sys.argv[1])),
stdout=subprocess.PIPE,
shell=True, check=True)
print(subprocess.stdout)

但真的,不要这样做。如果您真的无法避免子流程,请使其尽可能简单(避免 shell=True 并剥离所有可以在 Python 中完成的部分)。

关于python - 如何在 python 中使用 linux 命令和 python 函数 (sys.argv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56741996/

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