在awk、python表达式中无效的字符

2024-10-01 09:17:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个命令是这样的:

ps v -p 2585 | awk '{if ($9 != "%MEM") {print $9}}'

现在这在bash中运行得很好,它只需要您给它的任何pid的内存部分。不过,我现在正试图用python实现它,但是我遇到了一些问题。这是我用python编写的

^{pr2}$

现在来管理他们。。。在

runcmd1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
runcmd2 = subprocess.Popen(cmd2, stdin=runcmd1.stdout, stdout=subprocess.PIPE)

我得到这个错误:

awk: '{if (\$9 != "%MEM") {print \$9}}'
awk: ^ invalid char ''' in expression

我用这个打印出命令的样子。。。 系统标准输出写入(''.join(cmd1)+'+'+'+'+'+'.join(cmd2)+'\n')

它给出了:

ps v -p 1073 | awk '{if ($9 != "%MEM") {print $9}}'

我看不出这个命令和实际的bash命令有什么区别。有人能帮忙吗?在


Tags: 命令bashifstdoutmempssubprocessprint
2条回答

当您通过popen运行awk命令时,您不需要保护awk命令不受shell的影响(参数已经被分割成一个列表,因此您的空白将被保留)。在

cmd2 = ['awk', '{if ($9 != "%MEM") {print $9}}']

会很好的。在


备查注释

Python有一些编写字符串的好方法,可以避免像您在这里尝试的那样进行转义,对于您确实需要的情况:

^{pr2}$

(但我不能保证源代码美化程序会在这里正确显示)

在bash中运行该命令时,bash会删除单引号并给awk第一个参数:

{if ($9 != "%MEM") {print $9}}

你给它单引号,你不应该这样做。你应该写下:

^{pr2}$

相关问题 更多 >