我想执行一个字符串,就好像它是 Mininethost.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...
...
这是为什么?我是否遗漏了导致不同(意外)输出的格式?