Проблемы с запуском командных файлов с Python - PullRequest
0 голосов
/ 05 июля 2018

Я довольно новичок в Python и пытался запустить файл .cmd с ним, но он не запустит его из правильного местоположения. Мой файл Run_setup.cmd настраивает другое программное обеспечение с кучей связанных файлов, поэтому я поместил их в отдельную папку для моего здравого смысла.

В настоящее время я могу получить файл .cmd для запуска из того же места, что и мой исходный код. Я знаю, что путаю путь к файлу для него с cwd = r '% s' , основываясь на том, что написано в документации, но я не понимаю, как.

Если cwd не равен Нет , функция изменяет рабочий каталог на cwd перед выполнением дочернего элемента. cwd может быть str и path-like объектом. В частности, функция ищет исполняемый файл (или первый элемент в аргументах) относительно cwd, если путь к исполняемому файлу является относительным.

В настоящее время он используется с помощью cwd = r 'C: \ LargeFolder \ Files \ CorrectFolder' на основе этого поста , и, похоже, он работает для любого пути к файлу, но Я не могу заставить его работать на меня.

from subprocess import Popen

def runCmdfile():
    # File Path to source code:    'C:\LargeFolder\Files'
    myDir = os.getcwd()

    # File Path to .cmd file:      'C:\LargeFolder\Files\CorrectFolder'
    myDir = myDir + '\CorrectFolder'

    runThis = Popen('Run_setup.cmd', cwd=r'%s' % myDir)

    stdout, stderr = runThis.communicate()

Чего мне здесь не хватает, и, кроме того, какова цель использования cwd = r '' ?

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

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

myDir = myDir + '\CorrectFolder'

должно быть

myDir = myDir + '\\CorrectFolder'
0 голосов
/ 06 июля 2018

у меня это работает:

def runCmdfile():
    # File Path to source code:    'C:\LargeFolder\Files'
    myDir = os.getcwd()

    # File Path to .cmd file:      'C:\LargeFolder\Files\CorrectFolder'
    myDir = os.path.join(myDir, 'CorrectFolder')

    # Popen does not take cwd into account for the file to execute
    # so we build the FULL PATH on our own
    runThis = Popen(os.path.join(myDir, 'Run_setup.cmd'), cwd=myDir)

    stdout, stderr = runThis.communicate()
0 голосов
/ 05 июля 2018

параметр cwd=. Часть r"" должна существовать только в определении вашей строки, чтобы иметь необработанную строку и заставить python игнорировать специальные последовательности, используя обратную косую черту.

Поскольку ваша строка взята из os.getcwd, она вам не нужна.

def runCmdfile():
    # File Path to source code:    'C:\LargeFolder\Files'
    myDir = os.getcwd()

    # File Path to .cmd file:      'C:\LargeFolder\Files\CorrectFolder'
    myDir = os.path.join(myDir, 'CorrectFolder')

    runThis = Popen('Run_setup.cmd', cwd=myDir)

    stdout, stderr = runThis.communicate()
...