【发布时间】:2015-07-30 11:49:55
【问题描述】:
我想执行一个字符串,就像它是 Mininet 的 host.popen() 模块中的 shell 脚本一样,它本质上是 Python 的 subprocess.Popen() 的包装器。脚本如下:
#!/bin/bash
T="$(date +%s%N)"
nc 10.0.0.7 1234 < somefile.txt
T="$(($(date +%s%N)-T))"
echo $T
如果我将它保存为文件并将其传递给popen(),则输出如预期(打印 nc 命令的持续时间):
dst_cmd = 'nc -l 1234 > /dev/null'
dst.popen( dst_cmd, shell=True )
p = src.popen( ['sh', './timer.sh'], stdout=subprocess.PIPE )
问题是每次我运行此脚本时,发送的文件somefile.txt 都会有所不同,并且它每秒运行几次,持续几分钟。我不想为每个文件编写一个新的 .sh 脚本。当我尝试将脚本作为字符串传递到popen() 时,像这样,
dst_cmd = 'nc -l 1234 > /dev/null'
dst.popen( dst_cmd, shell=True )
src_cmd = '''\
#!/bin/bash
T=\"$(date +%s%N)\"
nc 10.0.0.7 1234 < somefile.txt
T=\"$(($(date +%s%N)-T))\"
echo $T'''
p = src.popen( dedent(src_cmd), shell=True,
stdout=subprocess.PIPE )
输出是
Execution utility for Mininet
Usage: mnexec [-cdnp] [-a pid] [-g group] [-r rtprio] cmd args...
...
这是为什么呢?我是否遗漏了导致不同(意外)输出的格式?
【问题讨论】:
-
什么叫
mnexec?nc连接到什么? -
nc正在连接到网络中的另一台主机(代码已更新以显示这一点)。我不确定mnexec在这里做什么;它作为参数传递给Popen()调用:'mncmd' = [ 'mnexec', '-da', str( self.pid ) ]我从Mininet 源代码here 得到这个。
标签: python bash shell subprocess mininet