您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

子流程Popen和call有什么区别(如何使用它们)?

子流程Popen和call有什么区别(如何使用它们)?

有两种方法可以进行重定向。两者都适用于subprocess.Popensubprocess.call

设置关键字参数shell = Trueexecutable = /path/to/the/shell并在那里指定命令。

由于您只是将输出重定向文件,因此请设置关键字参数

stdout = an_open_writeable_file_object

对象指向output文件的位置。

subprocess.Popensubprocess.call

Popen不会阻塞,允许您在进程运行时与它进行交互,或者在Python程序中继续进行其他操作。调用Popen返回一个Popen对象。

call 确实会 阻止。它支持Popen构造函数相同的所有参数,因此您仍可以设置进程的输出,环境变量等,脚本将等待程序完成,并call返回表示进程退出状态的代码

returncode = call(*args, **kwargs)

与通话基本相同

returncode = Popen(*args, **kwargs).wait()

call只是一种便利功能。它在cpython的实现是在subprocess.py

def call(*popenargs, timeout=None, **kwargs):
    """Run command with arguments.  Wait for command to complete or
    timeout, then return the returncode attribute.

    The arguments are the same as for the Popen constructor.  Example:

    retcode = call(["ls", "-l"])
    """
    with Popen(*popenargs, **kwargs) as p:
        try:
            return p.wait(timeout=timeout)
        except:
            p.kill()
            p.wait()
            raise

如您所见,它周围是薄薄的包装纸Popen

其他 2022/1/1 18:32:54 有478人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶