Следующий код отлично работает в 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, но он все равно не работает.
На основе вашего примера вам нужно убедиться, что команда правильно процитирована:
subprocess.Popen([PATH_TO_G++ + "/g++", "file.cpp", "-o", "file.exe"])
Нет никакого способа, которым PATH_TO_g++ является допустимым именем переменной, поэтому я просто предполагаю, что вы предоставили это в качестве примера.
Теперь, что более важно, что вы пытаетесь сделать с подпроцессом? Просто запустите его и сделайте это основной операцией? Запустить его и захватить вывод? Запустить его в фоновом режиме?
Документация для модуля subprocess довольно понятна и обеспечивает много примеров о том, как вы можете его использовать.