我有一些python代码,它运行子进程命令dtncpd
,用于接收传入的所有文件。在
subprocess.call(["dtncpd","/home/dtn2"], cwd="/home/dtn2/dtn-2.9.0/apps/", shell="false")
dtncpd
每次都必须运行。但我也希望运行另一个子进程,而不会在一个文件python中中断dtncpd
子进程。在
另一个子流程如:
topik = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE, cwd="/home/dtn2/")
komp, err = topik.communicate()
kompserver = komp.split()
cek = len(kompserver)
上述两个过程互不相关,目的不同。在
当前的结果是程序永远不会到达第二个子进程。它仍然只等待第一个子进程。在
我怎样才能修好它?在
subprocess.call
是一个实用函数,它运行并等待进程返回。如果希望进程在后台运行而不需要Python等待它完成,则需要使用rawPopen
构造函数:我删除了
shell="false"
位,因为as I noted in the comments, it does the opposite of what you intend.请注意,您的第二个子流程几乎肯定是错误的。在}相比使用子进程更有效的相同信息。在
os.listdir
和os.stat
(或者仅在python3.5上,os.scandir
)之间,您可以获得与{这就是^{} 所做的:它等待直到子进程完成。在
您可以使用
Popen()
运行第一个命令来修复它:因为您不需要与此进程通信(使用
subprocess.call()
不收集子输出),所以这应该没问题。在稍后,一旦第二个命令终止,您可以调用
p1.wait()
等待子进程退出——假设它会退出。这将阻止创建僵尸dtncpd
进程。在这可能有点天真,因为第一个命令看起来可能是一个守护进程。如果是这种情况,并且您只是想启动
dtncpd
守护进程,那么您需要确保dtncpd
确实是守护进程。我不熟悉dtncpd
,可能需要提供一个配置设置或命令行参数,才能使其正常守护。在相关问题 更多 >
编程相关推荐