【问题标题】:subprocess.Popen throws an error when launched by Jenkins CIJenkins CI 启动 subprocess.Popen 时抛出错误
【发布时间】: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


    【解决方案1】:

    当您自己运行脚本时,您将使用 您的 用户权限运行它,(可能在管理员处或附近),而 Jenkins 以用户身份运行 anonymous - 您需要确保脚本在您以 anonymous 身份登录时运行 - 我怀疑这可能是文件/目录访问权限问题。

    看看你想用 Popen 做什么 - svn status 我想知道你是否考虑过使用 pysvn 而不是 Popen - 你会发现它更快更灵活。

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 2016-06-15
      • 1970-01-01
      • 2016-07-17
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多