gpt4 book ai didi

python 2子进程check_output不返回错误输出

转载 作者:行者123 更新时间:2023-11-28 21:50:54 24 4
gpt4 key购买 nike

我有这个方法

def do_sh_shell_command(string_command, env_variables=None):
cmd = shlex.split(string_command)
try:
p = subprocess.check_output(string_command, shell=True,
env=env_variables) # shell=True means sh shell used
except subprocess.CalledProcessError as e:
print 'Error running command: ' + '"' + e.cmd + '"' + ' see above shell error'
print 'Return code: ' + str(e.returncode)
return e.returncode, e.cmd
return 0, p

它工作但由于某种原因不返回特定命令的错误输出

def hold_ajf_job(job_order_id):
#print 'ctmpsm -UPDATEAJF ' + job_order_id + ' HOLD'
return do_sh_shell_command('ctmpsm -UPDATEAJF ' + job_order_id + ' HOLD')

hold_ajf_job('0e4ba')
do_sh_shell_command('lsl')

输出:

ctmpsm -UPDATEAJF 0e4ba HOLD
Error running command: "ctmpsm -UPDATEAJF 0e4ba HOLD" see above shell error
Return code: 1
/bin/sh: lsl: not found
Error running command: "lsl" see above shell error
Return code: 127

当我运行命令 ctmpsm -UPDATEAJF 0e4ba HOLD 只是形成普通的 shell 我得到以下错误输出

ctmtest1-tctmsv80 [288] ctmpsm -UPDATEAJF 0e4ba HOLD
Failed to Hold Orderno 0000e4ba. (rc=JOBSTATINCM).

这与我的 python 代码中无用的错误输出不同,我终究无法弄清楚为什么?

更新:

尝试 stderr=subprocess.STDOUT

def do_sh_shell_command(string_command, env_variables=None):
cmd = shlex.split(string_command)
try:
p = subprocess.check_output(string_command, stderr=subprocess.STDOUT, shell=True,
env=env_variables) # shell=True means sh shell used
except subprocess.CalledProcessError as e:
print 'Error running command: ' + '"' + e.cmd + '"' + ' see above shell error'
print 'Return code: ' + str(e.returncode)
return e.returncode, e.cmd
return 0, p

输出:

Error running command: "ctmpsm -UPDATEAJF 0e4ba HOLD" see above shell error
Return code: 1
Error running command: "lsl" see above shell error
Return code: 127

现在错误已经完全消失了?

最佳答案

作为documented ,当 check_output 引发异常时,它将命令的输出放在异常对象的 output 属性中。您可以执行以下操作:

try:
p = subprocess.check_output(string_command, stderr=subprocess.STDOUT,
shell=True, env=env_variables)
except subprocess.CalledProcessError as e:
print e.output
print 'Error running command: ' + '"' + e.cmd + '"' + ' see above shell error'
print 'Return code: ' + str(e.returncode)
return e.returncode, e.cmd
return 0, p

关于python 2子进程check_output不返回错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31284908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com