2014-11-10 3 views
0

Я написал небольшой скрипт python, намереваясь автоматизировать опции, отличные от параметров по умолчанию для gcc (на Kubuntu 14.04); питон работает без ошибок теперь, и вставив заявление отладки печати (или изменить системную команду на «эхо») проверяет правильность информации передается, но я получаю сообщение об ошибке от НКИ говоряPython вызов системной программы не работает

$ python gccm prog16 
gcc: fatal error: no input files 
compilation terminated. 

Вот сценарий Я писал:

#!/usr/bin/python 
from sys import argv #get incoming argument 
import subprocess #function to call an OS program 

script, target = argv 

# massage received argument into form needed for math.h linkage 
target = "-o " + target + " " + target + ".c -lm" 
subprocess.call (['gcc', target], shell=False)` 

Есть другие дополнения я бы сделать в GCC вызова (опции компиляции версии, строже код проверки и т.д.), если я могу получить это работать правильно. Основываясь на сообщении об ошибке, он, как представляется, вызывает gcc правильно, но целевой исходный файл не найден; может ли это не работать в директории, из которой я его вызываю? Если да, как я могу заставить его работать из правильной директории (где я храню файлы исходного кода C); если нет, что еще может вызвать это?

ответ

1

Если вы используете shell=False, ваши аргументы для подпроцессов не должны быть объединены вместе. Вместо этого, они должны быть друг другу свой собственный элемент в списке args:

subprocess.call(['gcc', '-o', target, target+'.c', '-lm'], shell=False) 

На соответствующую записку, любая причина, почему вы пишете что-то вроде этого сами? Если вы хотите использовать систему сборки на основе Python, посмотрите на SCons.

+0

Ну, что было бы полезно упомянуть, что в документации подпроцесса (по крайней мере версию я нашел и прочитал). : p Я пишу это сам, потому что: а) я могу использовать практику с python (это всего лишь полдюжины строк), и б) я действительно не ищу систему построения на основе python или любую систему сборки для добавьте еще один уровень вещей, который я должен изучить, пока я пытаюсь изучить сам python, * и * recarn C, а также c) я понятия не имел, что есть такой инструмент, и он не знал и не искал Это. –

+0

Нет проблем - просто подумал, что я бы указал на соответствующее приложение. Наслаждайтесь своим проектом! –

1

Если у вас есть shell=False, вы должны передать каждый аргумент отдельно в subprocess.call.

Попробуйте вместо этого:

subprocess.call (['gcc', '-o', target, target + '.c', '-lm'], shell=False) 
Смежные вопросы