我有一个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中,我有一个任务,其中的执行脚本如下:
#!/bin/sh
./myscript.py
问题: Jenkins控制台仅显示"I can see this message on Jenkins console output"。如果从子进程调用中有任何输出,它不会在控制台上打印出来。如果我通过putty连接到服务器A,并在shell上运行相同的命令(./myscript.py),我可以看到子进程调用的输出。
如何将这个子进程调用的输出打印在Jenkins控制台上?
FYI: 如您所见,我的命令从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(因为我正在Test文件夹中持有一个文件)。但是当Python脚本使用subprocess调用此批处理文件时,我得到的只是0作为返回值。为什么会这样,怎么解决?如果我能捕获正确的返回值,我就可以使Jenkins任务失败。编辑12/12:你好!有人能帮忙吗?