我使用的是subprocess.Popen
和Python
,我还没有找到通过Popen
连接命令(即foobar&&
bizbang)的优雅解决方案。
我可以这么做:
p1 = subprocess.Popen(["mmls", "WinXP.E01"], stdout=subprocess.PIPE)
result = p1.communicate()[0].split("\n")
for line in result:
script_log.write(line)
script_log.write("\n")
p1 = subprocess.Popen(["stat", "WinXP.E01"], stdout=subprocess.PIPE)
result = p1.communicate()[0].split("\n")
for line in result:
script_log.write(line)
但这真的不太美观(特别是如果我通过Popen
菊花链连接多个命令。
我希望在尽可能少的命令块中复制此输出。
not@work ~/ESI/lab3/images $ mmls WinXP.E01 && echo -e "\n" && stat WinXP.E01
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors
Slot Start End Length Description
00: Meta 0000000000 0000000000 0000000001 Primary Table (#0)
01: ----- 0000000000 0000000062 0000000063 Unallocated
02: 00:00 0000000063 0020948759 0020948697 NTFS (0x07)
03: ----- 0020948760 0020971519 0000022760 Unallocated
File: `WinXP.E01'
Size: 4665518381 Blocks: 9112368 IO Block: 4096 regular file
Device: 14h/20d Inode: 4195953 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ nott) Gid: ( 1000/ nott)
Access: 2013-03-16 23:20:41.901326579 -0400
Modify: 2013-03-04 10:05:50.000000000 -0500
Change: 2013-03-13 00:25:33.254684050 -0400
Birth: -
注意:我不想把这个输入到subprocess.Popen
p1 = subprocess.Popen(["mmls WinXP.E01 && echo -e '\n' && stat WinXP.E01"], stdout=subprocess.PIPE)
&;是shell运算符,默认情况下POpen不使用shell。
如果要使用shell功能,请在POpen调用中使用shell=True,但请注意,它的速度稍慢/内存占用较多。
这个怎么样:
这会并行地启动命令,这可能会比一个接一个地执行命令快一点(但可能不会太快)。但是,由于
communicate
调用是连续的,因此任何具有大输出(超过管道缓冲区)的命令都将阻塞,直到轮到它被清除为止。对于您的示例命令链,您可以调用:
相关问题 更多 >
编程相关推荐