首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >subprocess.run()在Python中的正确用法

subprocess.run()在Python中的正确用法
EN

Stack Overflow用户
提问于 2018-09-14 10:57:02
回答 2查看 256关注 0票数 0

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

代码语言:javascript
复制
sed $'s/\r//' -i filename
sed -i 's/^ *//; s/ *$//; /^$/d' filename
awk -F, 'NF==10' filename > temp_file && mv temp_file filename

我编写了以下代码:

代码语言:javascript
复制
cmd_1 = ["sed $'s/\r//' -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)

但我在这里发现了一个错误:

代码语言:javascript
复制
FileNotFoundError: [Errno 2] No such file or directory: "sed $'s/\r//' -i": "sed $'s/\r//' -i"

我搞错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-14 11:03:20

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

代码语言:javascript
复制
cmd_1 = ["sed" r"s/\r//", "-i", file]
cmd_2 = ["sed" "-i" "s/^ *//; s/ *$//; /^$/d", file]
subprocess.run(cmd_1)
subprocess.run(cmd_2)

最后一个命令需要shell提供的操作符>&&,因此您还需要指定shell=True,并将命令设置为字符串:

代码语言:javascript
复制
cmd_3 = f"awk -F, NF==10 '{file}' > tmp_file && mv temp_file '{file}'"
subprocess.run(cmd_3, shell=True)
票数 2
EN

Stack Overflow用户

发布于 2018-09-14 11:00:41

您必须使用shell=True参数:

代码语言:javascript
复制
subprocess.run(cmd_1, shell=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52330553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档