python - Jenkins 不在控制台中打印 python 脚本的输出

标签 python batch-file jenkins

我有一个 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/

相关文章:

perl - 如何在 .pl 和 .bat 文件中暂停控制台窗口?

windows - BATCH- echo %(打印百分号)

python - 汉明距离(Simhash python)给出了意想不到的值

python - ""的含义?成员资格测试空字符串文字

batch-file - 窗口查找器

Jenkins 管道多配置项目

jenkins - Jenkins 中 'blocked' 、 'stuck' 、 'pending' 、 'buildable' 作业之间的差异

javascript - 关于将闭包编译器集成到构建流程的建议

python - Python中使用#作为注释的由来?

python - 验证蛋白质序列