2017-08-08 108 views
0

从已知的shell脚本编写我的第一个Python3脚本,并且find命令和Python等价物遇到了一个小问题。Python等价于shell查找命令

目录中有几天的pcap文件。用户输入定义开始日期+时间结束日期+时间

这是在shell脚本中使用的命令和输出。看下面的cut命令会擦除除文件名外的所有内容。开始和结束时间是变量,所以在下面的例子中,我用实际的日期+时间代替了。

find /mnt/pcap/captures/ -type f -newermt "08/08 08:00" ! -newermt "08/08 08:02" | cut -c20-40 

full_cap_1354 

full_cap_1353 

full_cap_1348 

full_cap_1350 

full_cap_1349 

full_cap_1352 

full_cap_1351 

我确实找到了一种方法让Python运行os find命令,但似乎无法将开始和结束变量传递到命令中。

subprocess.check_output('find /mnt/pcap/captures/ -type f -newermt "$date1" ! -newermt "$date2" | cut -c20-40 > /home/mydir/loading_dock/load.txt', shell = True) 

所以,要么如果有一种方式来传递变量,那就是罚款或因为我正在学习Python的,想有这样做的一个Python的方式。

+0

你看看'os' python模块吗?也许在它的[文件和目录](https://docs.python.org/2/library/os.html#files-and-directories)部分,你可以找到有用的信息 – araknoid

回答

0

你应该通过子进程的字符串列表不仅字符串

+0

这样的任何例子? – backspin

+0

正如你所看到的,你传递给了subprocess.check_output()一个字符串!你必须使用insted的字符串列表,该列表的每个元素都将是一个单独的选项/命令或者你想在shell上分配的whatelse一个空间...例如try:subprocess.check_output(['find','/ mnt/pcap/captures /','-type','f','-newermt',''$ date1''' !','-newermt',''$ date2'','|','cut','-c20-40','>'',''/home/mydir/loading_dock/load.txt'],shell = True) –

+0

您的每一条命令都会成为List的一个元素。这样,如果您的List的元素动态添加到您的脚本中,您可以将动态命令传递给Shell。 –