首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于平台以platform方式更改函数的行为

基于平台以platform方式更改函数的行为
EN

Stack Overflow用户
提问于 2018-07-13 21:16:38
回答 1查看 39关注 0票数 0

使用案例:

我必须与python subprocess32模块一起工作,用于超时,但代码也可以在windows上运行。模块文档建议

代码语言:javascript
复制
if os.name == 'posix' and sys.version_info[0] < 3:
    import subprocess32 as subprocess
else:
    import subprocess

The problem:

我认为上面的方法没有考虑到像communicatecheck_outputwait这样的方法只有timeout参数和subprocess32模块。使用此方法,对这些方法的所有调用都将失败

我不希望实现同一函数的两个不同变体,有条件地导入模块和所有东西。

寻找一种巨蟒式的方式来处理这件事。我的直觉告诉我,decoratorspartial函数应该会有帮助,但似乎无法计算出精确和简洁的方法。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-14 17:50:34

我设计了一种非常丑陋的方法,使用partial函数来完成此任务

代码语言:javascript
复制
from functools import partial
from subprocess import check_output
import subprocess

if os.name == 'posix' and sys.version_info[0] < 3:
    from subprocess32 import check_output
    import subprocess32 as subprocess
    check_output = partial(check_output,timeout=10)

def execute_cmd(cmd, args):
    command = []
    command.append(cmd)
    command = command + args
    try:
        proc_out = check_output(command, stderr=subprocess.STDOUT)
    except subprocess.CalledProcessError as e:
        print("Failed to execute local command \nError code:%s, Output:%s",
                          e.cmd, e.returncode, e.output)
    # I wish to handle TimeoutExpired exception here, but then this won't be generic
    except:
        print("Command %s failed to execute on host", command)
        raise
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51326053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档