我有一个 python 脚本(myscript.py)如下:
#!/bin/python
import os
import optparse
import subprocess
import sys
sys.stdout.flush()
print("I can see this message on Jenkins console output")
cmd="sshpass -p 'xxx' ssh test@testmachine 'cmd /c cd C:\stage && test.bat'"
retval=subprocess.call(cmd,shell=True)
print retval
在 jenkins 中,我有一个 execute shell 的工作如下:
#!/bin/sh
./myscript.py
问题: Jenkins 控制台仅显示“我可以在 Jenkins 控制台输出中看到此消息”。 如果子进程调用有任何输出,它不会在控制台上打印出来。
如果我将 putty 到服务器 A 并在 shell 上运行相同的命令 (./myscript.py),我可以看到子进程调用的输出。
如何在 Jenkins 控制台上打印子进程调用的输出?
仅供引用:正如您从我的命令中看到的那样,子进程调用正在 Windows 上运行一个批处理文件; Jenkins 在 Linux 上运行;两台机器之间有ssh设置..
编辑: 我的 test.bat 看起来像这样:
echo off
RMDIR /S /Q C:\Test
IF %ERRORLEVEL% NEQ 0 (
ECHO Could not delete
EXIT /b %ERRORLEVEL%
)
如果我在 Windows 服务器上本地运行这个批处理文件,它会返回 1(因为我在测试文件夹中持有一个打开的文件)
但是当 python 脚本使用子进程调用调用这个批处理文件时,我得到的只是一个零 retval。
这是为什么以及如何解决这个问题?如果我可以捕获正确的 retval,我可以让 Jenkins 作业失败。
编辑 12/12: 你好!!任何人!有人!帮助!
最佳答案
我想知道它是否必须对缓冲的标准输出做任何事情
您可以在运行命令之前尝试设置 PYTHONUNBUFFERED
吗?
export PYTHONUNBUFFERED=true
关于python - Jenkins 不在控制台中打印 python 脚本的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40981910/