我有以下bash命令,其中我正在使用tcpdump然后使用date命令保存文件.我想直接在Python脚本中嵌入此命令,而不必单独调用bash脚本.
#!/bin/bash
timeout 2 tcpdump -i eth1 -s 96 -w /usr/src/pcapFiles/dump$(date +%y%m%d-%H%M%S).pcap
Run Code Online (Sandbox Code Playgroud)
当我运行上面的脚本时,我得到以下类型的文件名,这正是我需要的(即日期和时间在名称中呈现):
dump131104-191834.pcap
但是,我很难从Python中复制上面的命令.我已经把这个命令嵌入到Python中了.我不确定如何破坏日期命令,以便它可以像我需要的那样呈现文件名.以下是我的Python命令:
tcpd = subprocess.Popen(["timeout", "2", "tcpdump", "-i", "eth1", "-s", "96", "-w", "/usr/src/pcapFiles/dump$(date +%y%m%d-%H%M%S).pcap"], stdout=subprocess.PIPE)
output, err = tcpd.communicate()
Run Code Online (Sandbox Code Playgroud)
使用此命令,我从tcpdump获取以下输出文件名
dump$(date +%y%m%d-%H%M%S).pcap
$(..),又名命令扩展,由shell执行.由于您现在使用的是Python而不是shell,因此您无法免费获得该功能.
简单的解决方法是调用shell并为其命令:
tcpd = subprocess.Popen(["bash", "-c", "timeout 2 tcpdump -i eth1 -s 96 -w /usr/src/pcapFiles/dump$(date +%y%m%d-%H%M%S).pcap"], stdout=subprocess.PIPE)
output, err = tcpd.communicate()
Run Code Online (Sandbox Code Playgroud)
可以说更正确的解决方法是在Python中获取当前日期:
import datetime
filename=datetime.datetime.now().strftime("/usr/src/pcapFiles/dump%y%m%d-%H%M%S.pcap")
tcpd = subprocess.Popen(["timeout", "2", "tcpdump", "-i", "eth1", "-s", "96", "-w", filename, stdout=subprocess.PIPE)
output, err = tcpd.communicate()
Run Code Online (Sandbox Code Playgroud)