在Python中正确使用subprocess.run()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中正确使用subprocess.run()相关的知识,希望对你有一定的参考价值。

我想在Python中运行这些树bash命令:

sed $'s/
//' -i filename
sed -i 's/^ *//; s/ *$//; /^$/d' filename
awk -F, 'NF==10' filename > temp_file && mv temp_file filename

我写了以下代码:

cmd_1 = ["sed $'s/
//' -i", file]
cmd_2 = ["sed -i 's/^ *//; s/ *$//; /^$/d'", file]
cmd_3 = ["awk -F, 'NF==10'", file, "> tmp_file && mv tmp_file", file]

subprocess.run(cmd_1)
subprocess.run(cmd_2)
subprocess.run(cmd_3)

但我在这里得到这个错误:

FileNotFoundError: [Errno 2] No such file or directory: "sed $'s/
//' -i": "sed $'s/
//' -i"

我错了什么?

答案

如果您将命令作为列表提供,那么每个参数应该是一个单独的列表成员。因此:

cmd_1 = ["sed" r"s/
//", "-i", file]
cmd_2 = ["sed" "-i" "s/^ *//; s/ *$//; /^$/d", file]
subprocess.run(cmd_1)
subprocess.run(cmd_2)

最后一个命令需要shell提供的运算符>&&,因此您还需要指定shell=True,并使命令成为字符串:

cmd_3 = f"awk -F, NF==10 '{file}' > tmp_file && mv temp_file '{file}'"
subprocess.run(cmd_3, shell=True)
另一答案

你必须使用shell=True参数:

subprocess.run(cmd_1, shell=True)

以上是关于在Python中正确使用subprocess.run()的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用访问器的正确方法? [复制]

如何在 Python 模块中正确使用相对或绝对导入?

在 Python 中使用多处理,导入语句的正确方法是啥?

如何在 Python 中正确使用私有函数? [复制]

尝试在 python 中正确加载和使用 dll 文件

在 Python 中使用 None 值删除字典中键的正确方法