0

你好堆栈溢出用户,

我很难让 mypy 与 Popen 一起正常工作。本质上,我正在编写一个使用 mypy 但似乎无法在我的构建机器上获得有效输出的测试套件。

有问题的行如下:

p = subprocess.Popen(['mypy'] + extra_args + python_files, env=my_env, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIP)

extra_args指定缓存目录和回溯,并且python_files是要测试的有问题的文件。我相当有信心这些论点都不是问题,因为我已经玩过这些并且没有取得任何进展。

该文件位于 git repo 中,我已将其克隆并放在构建盒中。在本地这不是问题——我得到有效的 mypy 输出指示错误。但是,在我的构建机器上,我得到了OSError: [Errno 2] No such file or directory错误。完整的错误信息如下:

Traceback (most recent call last):
  File "mypath/run_mypy.py", line 83, in <module>
    main()
  File "mypath/run_mypy.py", line 70, in main
    p = subprocess.Popen(['mypy'] + extra_args + python_files, env=my_env, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
  File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
myotherpath/build-stack.mk:162: recipe for target 'mypy' failed

我已经尝试添加shell=True,但这导致所有 mypy 错误开始被抑制,并且被认为是错误的样式/安全问题。

我的猜测/想法是 mypy 可能不在 popen 在没有外壳的情况下使用的路径中,但我真的不确定。

4

1 回答 1

0

好的,刚刚发现了我的问题,而且很明显……哎呀!

这修复了它:python3 -m pip install -U mypy==0.530

原来我没有mypy安装在盒子上。该错误消息使我误入歧途,因为我认为它指的是我传递的参数之一,而不是实际的命令。希望这对将来的某人有所帮助。

于 2017-11-02T00:46:52.230 回答