【发布时间】:2013-11-29 10:44:29
【问题描述】:
我正在尝试从使用 subprocess.Popen() 的 Jenkins CI (1.509.4) 调用 python 脚本,但如果失败并出现错误。如果我使用命令提示符(Windows 7)调用该脚本,则脚本可以正常工作。 这是一个代码示例:
import os
import subprocess
params = 'svn status --no-ignore E:\\jenkins_tmp\\abc'
cwd = os.path.dirname(__file__)
print 'cwd: ' + cwd
proc = subprocess.Popen(params, cwd=cwd, stdout=subprocess.PIPE)
for line in iter(proc.stdout.readline, ''):
print line,
proc.wait()
来自 Jenksins 控制台输出的错误:
Started by user anonymous
Building in workspace D:\Jenkins\jobs\zzz_svn_delete_unversioned_files\workspace
[workspace] $ cmd /c call C:\Windows\TEMP\hudson9055590820378012726.bat
cwd: E:\jenkins_tmp\my_utils
Traceback (most recent call last):
File "E:\jenkins_tmp\my_utils\temp2.py", line 8, in <module>
proc = subprocess.Popen(params, cwd=cwd, stdout=subprocess.PIPE)
File "C:\Program Files (x86)\Python27\lib\subprocess.py", line 679, in __init__
errread, errwrite)
File "C:\Program Files (x86)\Python27\lib\subprocess.py", line 893, in _execute_child
startupinfo)
WindowsError: [Error 2]
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE
有谁知道为什么这个脚本从 Jenkins 和命令提示符启动时会有不同的行为?
解决方案:令人惊讶的是,它需要使用 SVN 的完整路径,所以在初始代码中我更改了下一行:
params = 'C:\\Program Files\\TortoiseSVN\\bin\\svn.exe status --no-ignore E:\\jenkins_tmp\\abc'
【问题讨论】:
标签: python windows jenkins subprocess