如何在 python 脚本中调用 sed 命令?

如何在 python 脚本中调用 sed 命令?

通过 python 脚本,我尝试使用命令将文件中的字符串替换为字符串sed。我按照subprocess.call脚本中的方式执行此操作。

当我在 shell 脚本或命令中运行该命令时,它运行良好,但在 python 中我得到的结果是“无输入文件”。有什么想法可以修复该错误吗?

#!/usr/bin/python
import subprocess
subprocess.call(["sed -i -e 's/hello/helloworld/g'","www.txt"], shell=True)

输出

No input file

答案1

subprocess.call,命令的每个参数都应是列表中的单独项目(并且shell不应设置为True):

subprocess.call(["sed", "-i", "-e",  's/hello/helloworld/g', "www.txt"])

或者,整个命令应该是一个字符串,其中包含shell=True

subprocess.call(["sed -i -e 's/hello/helloworld/g' www.txt"], shell=True)

subprocess.call对于和,参数的处理方式类似Popen,与subprocess.Popen说:

在具有 的 Unix 上shell=True,shell 默认为/bin/sh。... 如果args是一个序列,则第一项指定命令字符串,任何其他项将被视为 shell 本身的附加参数。也就是说,Popen是否相当于:

Popen(['/bin/sh', '-c', args[0], args[1], ...])

答案2

您应该避免使用 Pythonsubprocess来实现其功能sed,例如使用以下fileinput模块:

#! /usr/bin/python
import fileinput
for line in fileinput.input("www.txt", inplace=True):
    # inside this loop the STDOUT will be redirected to the file
    # the comma after each print statement is needed to avoid double line breaks
    print line.replace("hello", "helloworld"),

相关内容