【问题标题】:How to use Popen instead of check_call?如何使用 Popen 而不是 check_call?
【发布时间】:2013-06-18 08:08:59
【问题描述】:

我正在使用 python 2.6 版运行 Debian 6 挤压。我有两个这样的子流程代码:

rsync_out = subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source], 
                     stdout=subprocess.PIPE)
command = subprocess.check_call(('grep', '\.'), stdin=rsync_out.stdout)

它完全按照我想要的方式工作,但没有可用于 python 2.6 的 check_call。 subprocess.Popen如何调用第二条命令?

试过这样但没有用:

command = subprocess.Popen(['grep', '\.'], stdin=rsync_out.stdout).communicate()[0]

我收到此错误:

'NoneType' object has no attribute 'split'

【问题讨论】:

    标签: python subprocess python-2.6


    【解决方案1】:

    我想您正在尝试获取第二个命令的返回码?试试这个:

    rsync_out = subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source],
                     stdout=subprocess.PIPE)
    command = subprocess.Popen(['grep', '\.'], stdin=rsync_out.stdout)
    command.communicate()
    returnCode = command.returncode
    

    【讨论】:

    • 'str' 对象没有属性 'stdout'
    • 回溯(最近一次调用最后一次):文件“”,第 1 行,在 中 AttributeError:'tuple' 对象没有属性'returncode'
    • 现在工作正常。但问题是值存储在哪里。我无法在 returnCode 上获得任何值。
    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2021-12-11
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多