python获取shell输出及返回码_如何执行shell命令获取Python中命令后的输出和pwd

该博客讨论了如何在Python中使用`subprocess`模块重定向`stdout`到`pwd`命令的`stderr`。当`stdout`为空且`stderr`不是一个路径时,会抛出异常。文中提供了一个改进的实现,通过修改命令行来确保`stderr`包含`pwd`命令的正确输出,并返回一个包含当前工作目录(`cwd`)和过滤后的`stdout`的字典。
摘要由CSDN通过智能技术生成

我将stdout重定向到pwd命令的stderr。如果stdout为空且stderr不是路径,那么stderr是命令的错误

import subprocess as sub

def execv(command, path):

command = 'cd %s && %s && pwd 1>&2' % (path, command)

proc = sub.Popen(['/bin/bash', '-c', command],

stdout=sub.PIPE, stderr=sub.PIPE)

stderr = proc.stderr.read()[:-1]

stdout = proc.stdout.read()[:-1]

if stdout == '' and not os.path.exists(stderr):

raise Exception(stderr)

return {

"cwd": stderr,

"stdout": stdout

}更新:这里是更好的实现(使用pwd的最后一行,不要使用stderr)

def execv(command, path):

command = 'cd %s && %s 2>&1;pwd' % (path, command)

proc = sub.Popen(['/bin/bash', '-c', command],

env={'TERM':'linux'},

stdout=sub.PIPE)

stdout = proc.stdout.read()

if len(stdout) > 1 and stdout[-1] == '\n':

stdout = stdout[:-1]

lines = stdout.split('\n')

cwd = lines[-1]

stdout = '\n'.join(lines[:-1])

return {

"cwd": cwd,

"stdout": man_to_ansi(stdout)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值