вызов подпроцесса ведет себя по-разному в разных установках Windows - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть две очень похожие машины Windows 7 Enterprise.

Но когда я запускаю этот кусок кода (python 2.73), он работает на одном из них, но не на другом.

command = [
        'artifact',
        'cp',
        source,
        target
    ]

artifact_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

Я получаю это сообщение об ошибке:

    artifact_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  File "C:\Python27\lib\subprocess.py", line 390, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 640, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

Команда «Артефакт», которую я пытаюсь запустить с некоторыми аргументами, - это просто разработанный Java инструмент командной строки.Он находится на PATH для обеих машин, и он отлично работает, чтобы запустить одну и ту же команду вручную.

C:\Jenkins\3\workspace>where artifact
C:\Binaries\artifact-cli\artifact
C:\Binaries\artifact-cli\artifact.bat

Но когда я пытаюсь запустить ее с помощью скриптов Python и команды подпроцесса, на одном из компьютеров происходит сбой.Если я добавлю «shell = True» в команду подпроцесса.Затем он работает на обеих машинах.

Я пытался сравнить настройки для обеих этих машин, пытаясь найти разницу, которая могла бы помочь объяснить, почему она работает на одной, а не на другой.Но до сих пор я оказался пустым.

Я действительно хотел бы избегать использования "shell = True", и, насколько я понимаю, мне не нужно было бы выполнять такую ​​операцию.

Вопрос в том.Что в Windows может вызвать эту разницу?

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