使用subprocess.call()
.来自文档:
subprocess.call(*popenargs,**kwargs)
运行带参数的命令.等待命令完成,然后返回returncode属性.参数与Popen构造函数相同.
编辑:
subprocess.call()
使用wait()
,并且wait()
容易受到死锁(正如汤米赫伯特指出的那样).来自文档:
警告:如果子进程生成足够的输出到stdout或stderr管道,这会阻塞等待OS管道缓冲区接受更多数据,这将导致死锁.使用communic()来避免这种情况.
因此,如果您的命令生成大量输出,请communicate()
改为使用:
p = subprocess.Popen( ["scanx", "--udp", host], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate()
如果你根本不需要输出,你可以将devnull传递给stdout
和stderr
.我不知道这是否有所作为,但通过bufsize.现在使用devnull subprocess.call
不会再遇到死锁
import os import subprocess null = open(os.devnull, 'w') subprocess.call(['ls', '-lR'], bufsize=4096, stdout=null, stderr=null)