Как запустить программу с большим количеством аргументов в Python / Linux

1

Следующий код отлично работает в Windows:

subprocess.Popen([PATH_TO_G++]/g++ file.cpp -o file.exe)

Однако в Linux я получаю следующую ошибку:

OSError: [Errno 2] Нет такого файла или каталога

После прочтения документации и нескольких потоков SO я обнаружил, что subprocess.Popen работает по-разному в системах Windows и nix. В окнах он принимает строку как параметр и запускает ее так же, как вы запускаете ее в терминале.

Однако в linux требуется список строк, если у вас есть параметры. Первое значение - это сама программа, затем перейти к атрибутам. Вы можете заставить его вести себя как Windows, передав аргумент Shell = True, но это не очень хорошее решение для меня.

Я попробовал функцию shlex.split, но он все равно не работает.

  • 0
    Вы пробовали `subprocess.Popen ([" progpath "," arg1 "," arg2 "," arg3 "])?
  • 0
    @ khachik, да, но я мог ошибиться. Как использовать аргументы с моим примером?
Показать ещё 2 комментария
Теги:
attributes
process

1 ответ

4
Лучший ответ

На основе вашего примера вам нужно убедиться, что команда правильно процитирована:

subprocess.Popen([PATH_TO_G++ + "/g++", "file.cpp", "-o", "file.exe"])

Нет никакого способа, которым PATH_TO_g++ является допустимым именем переменной, поэтому я просто предполагаю, что вы предоставили это в качестве примера.

Теперь, что более важно, что вы пытаетесь сделать с подпроцессом? Просто запустите его и сделайте это основной операцией? Запустить его и захватить вывод? Запустить его в фоновом режиме?

Документация для модуля subprocess довольно понятна и обеспечивает много примеров о том, как вы можете его использовать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню