python 在subprocess.runAzureDevops管道(Ubuntu 20.04)中运行www.example.com()中的sphinx-apidoc不会出现错误,也不会执行

qlckcl4x  于 2022-12-10  发布在  Python
关注(0)|答案(1)|浏览(79)

问题

正如标题所说,我正在尝试在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 --versionsubprocess.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才会导致错误,这只是为了简单起见。而且它仍然会给予我一个正确的错误消息,所以我知道子进程运行正常。*
2vuwiymt

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完美,还显示了发送的命令并提供了命令的输出)

cmd = ['sphinx-apidoc']
cmd.append('-f')
...          
try:
    res = subprocess.run(callList, text=True, capture_output=True, check=True)
    print(res)
    print(res.stdout)

except subprocess.CalledProcessError as e: 
    print("CalledProcessError: " + str(e.output))

相关问题