Python 如何构建一个包装器以等待在端口上侦听?

Python 如何构建一个包装器以等待在端口上侦听?,python,testing,sockets,wrapper,Python,Testing,Sockets,Wrapper,我正在寻找一种以编程方式测试使用asyncorePython模块编写的脚本的方法。我的测试包括启动有问题的脚本——如果打开了TCP侦听套接字,则测试通过。否则,如果脚本在到达该点之前死亡,测试将失败 这样做的目的是了解夜间构建是否有效(至少在一定程度上) 我认为最好的测试方法是在某种沙盒包装器中启动脚本,该包装器等待套接字请求。我不关心在该端口上实际侦听任何内容,只是截取请求并将其用作我的测试通过的指示 我认为最好是拦截开放套接字请求,而不是以固定的间隔轮询(我讨厌轮询!)。但我有点不知道该怎么

我正在寻找一种以编程方式测试使用
asyncore
Python模块编写的脚本的方法。我的测试包括启动有问题的脚本——如果打开了TCP侦听套接字,则测试通过。否则,如果脚本在到达该点之前死亡,测试将失败

这样做的目的是了解夜间构建是否有效(至少在一定程度上)

我认为最好的测试方法是在某种沙盒包装器中启动脚本,该包装器等待套接字请求。我不关心在该端口上实际侦听任何内容,只是截取请求并将其用作我的测试通过的指示

我认为最好是拦截开放套接字请求,而不是以固定的间隔轮询(我讨厌轮询!)。但我有点不知道该怎么做

我可以用shell脚本来实现这一点吗?或者我需要在Python级别重写asyncore模块

提前感谢,

-这感觉像是高尔夫密码:

#!/bin/sh
# iamwaiting: run a command for a specified time then kill it
# returns the status of cmd on normal termination


opath=$PATH
PATH=/bin:/usr:/bin

SIGNAL=
case $1 in
    -*) SIGNAL=$1; shift;;
esac

case $# in
    0|1) echo 'usage iamwaiting [-signal] wait cmd [args]' 1>&2; exit 2;;
esac

wait=$1 ; shift

PATH=$opath "$@" &
child=$!

# unfortunately, this script takes at least wait seconds to run
sleep $wait

if kill ${SIGNAL:--2} $child 2> /dev/null ; then
    echo "iamwaiting timeout after $wait seconds: $@" 1>&2
    exit 1
else
    wait $child
    exit $?
fi
因此:

$ iamwaiting  5 dd if=/dev/zero of=/dev/null count=5
5+0 records in
5+0 records out
2560 bytes (2.6 kB) copied, 2.0973e-05 s, 122 MB/s
$ echo $?
0
$ iamwaiting -9 5 dd if=/dev/zero of=/dev/null 
iamwaiting timeout after 5 seconds: dd if=/dev/zero of=/dev/null
$ echo $?
1
$ iamwaiting 1 cat /dev/does-not-exist
cat: /dev/does-not-exist: No such file or directory
$ echo $?
1

我会小心使用asynchore例程测试asyncore程序,但我迷信这种方法。

另一种选择是在导入
asyncore
模块之前模拟
socket
模块。当然,您必须首先确保模拟正常工作。

这还不错,一点也不错。虽然我认为在超时之后,您希望
退出0
,而不是
退出1
,因为超时是正常行为(脚本只是坐着等待传入连接)。您的脚本确实存在以下限制:a)它必须运行
$wait
秒(尽管您可能可以通过捕获
SIGCHLD
来绕过这一限制);b)它假设相关脚本将在可预测的延迟内打开侦听套接字。唉,至少有两个shell(为了最广泛的兼容性,我使用了有点复古的
dash
,还有bash)swallow-SIGCHLD作为后台进程。恐怕这是shell所能做的最好的了。但是感谢你让我重温这篇文章,我发现了一个单字符的小喇叭。