Python子进程向shell参数添加额外的引号

2024-05-19 09:49:07 发布

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

预期行为

在正常情况下,我可以在linux下发出tshark -E separator='@',请参见注释A并强制它显示由@分隔的字段,如下所示。。。在

[mpenning@hotcoffee ~]$ tshark -r scp_test.pcap -e frame.number -e ip.src_host -e tcp.srcport -E separator='@' -T fields tcp | less
1@192.168.12.236@33088
2@192.168.12.238@22
3@192.168.12.236@33088
...

意外行为

同样地,我认为我应该通过subprocess.Popen()、columnify和colorize运行相同的命令。。。当我运行脚本时,所有的分析都依赖于以@分隔的输出。。。但是,我的脚本是使用@而不是。。。相反,它只使用了一句话;我不确定我是否理解为什么会发生这种情况。在

脚本

^{pr2}$

结果

[mpenning@hotcoffee ~]$ python analyze.py scp_test.pcap | less
1'192.168.12.236'33088
2'192.168.12.238'22
3'192.168.12.236'33088
4'192.168.12.238'22
5'192.168.12.236'33088
6'192.168.12.236'33088
7'192.168.12.238'22
8'192.168.12.236'33088

我是否使用以下任何一种方法分配sep似乎并不重要。。。在

  • sep = '@'
  • sep = '\@'
  • sep = re.escape('@') # Desperation attempt ;-)

问题

有人能解释一下:

  1. 为什么在上面的脚本中我的输出没有用@分隔。在
  2. 如何使用subprocess查看注释B修复脚本?在


尾注

注释A。系统信息:

[mpenning@hotcoffee ~]$ python -V
Python 2.6.6
[mpenning@hotcoffee ~]$ uname -a
Linux hotcoffee 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 x86_64 GNU/Linux
[mpenning@hotcoffee ~]$

注意B。使用os.system()os.popen()的答案不是我想要的


Tags: test脚本oslinux情况pcapseptcp

热门问题