首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KeyError:当我使用subprocess.call时‘打印$2’(“ps -ef \ grep \ grep \grep {0} x awk '{print $2}‘)

KeyError:当我使用subprocess.call时‘打印$2’(“ps -ef \ grep \ grep \grep {0} x awk '{print $2}‘)
EN

Stack Overflow用户
提问于 2020-10-16 09:26:17
回答 2查看 284关注 0票数 1

在我的macOS中,我使用wget下载www.test.com索引页面。

然后我有下面的python代码:

代码语言:javascript
运行
复制
#-*- coding:utf-8 -*-
import subprocess

url = "https://www.test.com"

subprocess.call("ps -ef | grep wget | grep {0}  | awk '{print $2}'".format(url), shell=True)

当我运行它时,我会遇到这样的问题:

代码语言:javascript
运行
复制
subprocess.call("ps -ef | grep wget | grep {0}  | awk '{print $2}'".format(url), shell=True)
KeyError: 'print $2'

我将subprocess.call()转换为os.system(),仍然会遇到这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-16 14:12:29

您的错误不是由子进程引起的,而是由字符串格式引起的。

代码语言:javascript
运行
复制
"ps -ef | grep wget | grep {0}  | awk '{print $2}'".format(url)

您可以使用%s来形成字符串。

代码语言:javascript
运行
复制
"ps -ef | grep wget | grep %s  | awk '{print $2}'"%(url)
票数 1
EN

Stack Overflow用户

发布于 2020-10-16 09:38:37

您需要使用subprocess.run()

来自文档

需要捕获stdout或stderr的代码应该使用run()代替注意到:不要在此函数中使用、stdout=PIPE、stderr=PIPE。如果子进程生成足够多的输出到管道以填充OS管道缓冲区,则子进程将被阻塞,因为管道不是从中读取的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64386464

复制
相关文章

相似问题

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