Запустите команду bash в Cygwin из другого приложения - PullRequest
3 голосов
/ 22 сентября 2011

Как я могу выполнить произвольные команды оболочки из приложения Windows, написанного на C ++ или python?

Обычно моя установка Cygwin запускается из следующего файла bat:

@echo off

C:
chdir C:\cygwin\bin

bash --login -i

Ответы [ 3 ]

5 голосов
/ 22 сентября 2011

В Python запустите bash с os.system, os.popen или subprocess и передайте соответствующие аргументы командной строки.

os.system(r'C:\cygwin\bin\bash --login -c "some bash commands"')
2 голосов
/ 02 октября 2015

Следующая функция запустит программу Cygwin Bash, убедившись, что каталог bin находится в системном пути, поэтому у вас есть доступ к не встроенным командам. Это альтернатива использованию опции входа в систему (-l), которая может перенаправить вас в ваш домашний каталог.

def cygwin(command):
    """
    Run a Bash command with Cygwin and return output.
    """
    # Find Cygwin binary directory
    for cygwin_bin in [r'C:\cygwin\bin', r'C:\cygwin64\bin']:
        if os.path.isdir(cygwin_bin):
            break
    else:
        raise RuntimeError('Cygwin not found!')
    # Make sure Cygwin binary directory in path
    if cygwin_bin not in os.environ['PATH']:
        os.environ['PATH'] += ';' + cygwin_bin
    # Launch Bash
    p = subprocess.Popen(
        args=['bash', '-c', command],
        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    p.wait()
    # Raise exception if return code indicates error
    if p.returncode != 0:
        raise RuntimeError(p.stderr.read().rstrip())
    # Remove trailing newline from output
    return (p.stdout.read() + p.stderr.read()).rstrip()

Пример использования:

print cygwin('pwd')
print cygwin('ls -l')
print cygwin(r'dos2unix $(cygpath -u "C:\some\file.txt")')
print cygwin(r'md5sum $(cygpath -u "C:\another\file")').split(' ')[0]
1 голос
/ 22 сентября 2011

Bash должен принимать команду от args при использовании флага -c:

C:\cygwin\bin\bash.exe -c "somecommand"

Объединить это с C ++ exec или python os.system для запуска команды.

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