Python 中的 Windows 命令提示符

问题描述 投票:0回答:1

我有以下代码捕获流量数据包,将它们写入 traffic.pcap 文件,然后使用 tshark 将 pcap 转换为文本文件。如果我在最后一行输入文件的完整路径和名称,代码可以完美运行,但它总是覆盖文件,所以我添加了这些行来为每个文件添加时间,这样我就可以保存所有文件,嗅探和写入命令按预期工作,每次我运行它们都会创建一个新名称并使用新名称保存文件,但是,当代码到达最后一行时,它无法识别要读取的文件名称(源和目标)并转换,任何帮助将不胜感激。

from scapy.all import *
import time
import os
# Create a new unique name
if os.path.exists('D:/folder/traffic.pcap'):
    file_name = ('D:/folder/traffic_{}.pcap'.format(int(time.time())))
# Create a destination file
txt_file = file_name + '.txt'
# Sniff traffic and write to a file *.pcap
x = sniff(count=10)
wrpcap(file_name,x)
# Convert pcap file to txt file usign tshark command
#os.system('cmd /c "tshark -i - < "D:/folder/traffic.pcap" > "D:/folder/traffic.txt""')# working line
os.system('cmd /c "tshark -i - < %file_name% > %txt_file%"')#not working line

最后一行生成的输出是

The system cannot find the file specified.

python command
1个回答
0
投票

%file_name%
是一个
cmd
变量。 您需要使用 python 变量。

您可以通过访问python变量

f'cmd /c "tshark -i - < {file_name} > {txt_file}"'
(一个 f 弦
f"string"
,像
.format
一样工作。)

system
调用不在 python 中运行。它分叉(很好地创建)一个新进程。创建后,进程不通信。连水管都没有。您可以使用
process
模块来创建具有某些进程间通信的进程,但是它们无法访问彼此的变量。

替换行是:

os.system(f'cmd /c "tshark -i - < {file_name} > {txt_file}"')

您可能还希望将

bash
视为您的外壳。

© www.soinside.com 2019 - 2024. All rights reserved.