问题
正如标题所说,我正在尝试在Azure DevOps构建管道中的Ubuntu 20.04上从subprocess.run()
运行sphinx-apidoc
。
我的问题是,我似乎得到一个错误,但没有消息,没有什么是真正执行?
我的密码是
call = ['sphinx-apidoc']
try:
res = subprocess.run(call, text=True, check=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
print(res)
print("stdout: ", res.stdout)
print("stderr: ", res.stderr)
except subprocess.CalledProcessError as e:
print("CalledProcessError: " + e.output)
我的输出是CalledProcessError:
没有任何输出。
"我的努力"
我可以使用一个流水线步骤task: CmdLine@2
调用sphinx-apidoc
,我还可以使用上面的www.example.com()调用例如python --version
subprocess.run,使用
call= ['python']
call.append('--version')
1.为什么我没有从错误中得到输出?
1.为什么它不工作,虽然其他命令,如运行python的工作?
1.为什么我可以毫无问题地从管道步骤执行命令?
更新-任务定义
对于test命令,我只使用以下命令:
- task: CmdLine@2
inputs:
script: |
sphinx-apidoc *putfolder *source
我的python脚本应该运行Subprocess.run()
Python3.9.15
- task: PythonScript@0
inputs:
scriptSource: 'filePath'
scriptPath: '$(System.DefaultWorkingDirectory)/myScript.py'
- p.s.我知道只有在不带参数的情况下调用sphinx-apidoc才会导致错误,这只是为了简单起见。而且它仍然会给予我一个正确的错误消息,所以我知道子进程运行正常。*
1条答案
按热度按时间2vuwiymt1#
好吧,在尝试了很多不同的东西之后,我想回答自己:
问题很多。
1. sphinx-apidoc模块路径
我提供了
sphinx-apidoc
不喜欢的绝对模块路径。需要传入相对路径2.正确使用capture_output选项
最后,我删除了stdout=subprocess.PIPE,只设置了
capture_output
。我还删除了我临时使用的shell=True
3.检查命令字符串
我使用
subprocess.list2cmdline(*listOfArgs*)
来验证我的命令,我还必须删除不需要的引号/双引号。所以与Azure DevOps或一些错误的环境设置无关,只是我无法在Ubuntu:D下正确地使用Python +处理字符串和命令进行开发,但也许这对某些人仍然有帮助
最终代码
(not完美,还显示了发送的命令并提供了命令的输出)