我有一个python脚本(myscript.py)如下:詹金斯不打印Python脚本的输出在控制台
#!/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 [email protected] 'cmd /c cd C:\stage && test.bat'"
retval=subprocess.call(cmd,shell=True)
print retval
在詹金斯,我有如下执行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: Helllo !!任何人!有人!帮帮我!
我怀疑你的问题是使用sshpass。这将设置自己的tty来欺骗ssh,允许交互式会话。它还根据连接的成功设置返回代码,而不是在ssh内运行命令的结果。你可以尝试直接使用ssh,而不是使用公钥授权? –
好的..现在就试试 – user1164061
不行!我创建了一个公共密钥,并清除了ssh pass。我仍然得到相同的结果... :-( – user1164061