Невозможно выполнить Python вызовы подпроцесса с использованием Jenkins - PullRequest
0 голосов
/ 10 января 2020

Вопрос был задан в другом месте, но я не вижу никаких решений для этого ...

У меня есть сценарий Python, который содержит вызовы подпроцесса в форме:

source_density = subprocess.check_output(["adb", device_dhm1, "-P8080", "-s", source, "shell", "wm density | head -2 | tail -1"])

При запуске этого скрипта через cmd все работает нормально. Однако теперь я пытаюсь запустить его через Jenkins, и я получаю следующее сообщение об ошибке:

======================================================================
ERROR: test_sanity (__main__.ABC)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/user123/.jenkins/workspace/Test/Jenkins-Source-Sanity.py", line 145, in test_sanity
    source_density = subprocess.check_output(["adb", device_dhm1, "-P8080", "-s", source, "shell", "wm density | head -2 | tail -1"])
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 216, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 394, in __init__
    errread, errwrite)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1047, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

1 Ответ

1 голос
/ 10 января 2020

По умолчанию check_output обрабатывает первый аргумент как один исполняемый файл вместо команды оболочки (команда cmd). Таким образом, вы должны установить флаг shell=True явно.

source_density = subprocess.check_output(["adb", device_dhm1, "-P8080", "-s", source, "shell", "wm density | head -2 | tail -1"], shell=True)

Пожалуйста, прочитайте do c здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...