我们有C++ binary,它会监视一些目录,如果有任何新文件添加到这些目录,C++ binary会解析该文件,创建新文件并将其放置在其他目录中。
我们需要测试处理过的文件。我们使用Python来测试它。我们的Python测试用例如下所示
- 在子进程中启动C++二进制文件。
- 将一些文件添加到目录中。
- 等待一段时间,给予C++二进制一些处理时间。
- 测试处理后的文件内容。
下面是我使用的伪代码。
file = 'SomeFile.txt'
prc = subprocess.Popen([cpppath, "-v", "-c", cfg], stdout=file)
# Add some files in to a directory
time.sleep(5) # To give time to C++ binary
# Test the content
但我观察到的问题是,time.sleep()也会停止C二进制。我知道这一点是因为我们在C二进制中有一个cron线程,它每秒都会打印I am Alive。在我们调用python中的**timer.sleep()**之前,它一直在打印。一旦睡眠结束,Python测试就开始测试内容。但由于C二进制文件没有机会处理watch目录中的文件,因此测试失败。
我的经理建议使用信号。Python测试用例将在watch目录中创建文件,并等待sigusr1,一旦信号到来,测试将继续进行。C二进制处理输入文件,将处理后的文件放在一个目录中,并向python test的父进程发出信号。但即使这样,Python测试也需要使用sleep()或pause(),这将再次出现同样的问题。
请任何人告诉我是否有任何方法可以解决这个问题。
1条答案
按热度按时间slwdgvem1#
不,在Python中调用
time.sleep()
不会影响以subprocess.Popen()启动的二进制文件。一定有其他原因导致测试结果不符合预期。