Videresending kommandolinje argumenter til en prosess i Python

stemmer
2

Jeg bruker en grov IDE (Microchip MPLAB) med C30-verktøyene på Windows XP. C-kompilator har en veldig bråkete utgang som jeg er ute av stand til å kontrollere, og det er svært vanskelig å få øye på selve advarsler og feil i produksjonen vinduet.

Jeg ønsker å skrive en python skript som ville få argumenter for kompilatoren, ringe kompilatoren med samme argumentene, filter resultater og utgang dem til stdout . Da kan jeg erstatte kompilatoren kjørbar med manuset mitt i verktøysett innstillinger. IDE kaller mitt manus og mottar filtrert kompilatoren utgang.

Koden min for å gjennomføre kompilatoren ser slik ut:

arguments = ' '.join(sys.argv[1:])
cmd = '%s %s' % (compiler_path, arguments)
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Problemet er at sitater fra argumentene er fortært på kjøring av skriptet, så hvis IDE kaller mitt manus med følgende argumenter:

main.c -o main.o

verdien av argumenter er

main.c -omain.o

Den mest åpenbare løsningen er å sette hele argumentliste i anførselstegn, men dette vil kreve endring i kompilatoren ringer koden i IDE. Jeg har også prøvd å bruke batch-fil, men det kan bare godta ni parametere (% 1 til% 9), og kompilatoren kalles med 15+ parametere.

Er det en måte å videresende nøyaktig de samme argumentene til en prosess fra manus?

Publisert på 03/11/2009 klokken 08:15
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Skallet er å spise sitater (python script aldri får dem) så jeg antar det er ikke veldig lett å få dem 'uendret'.

Svarte 03/11/2009 kl. 08:23
kilden bruker

stemmer
3

Som ChristopheD sa skallet fjerner anførselstegn.

Men du trenger ikke å lage strengen selv når du bruker popen: det kan håndtere det for deg automatisk. Du kan gjøre dette i stedet:

import sys, subprocess
process = subprocess.Popen(sys.argv[1:], executable=compiler_path, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Den delprosess modulen forhåpentligvis vil passere argumentene riktig for deg.

Svarte 03/11/2009 kl. 08:35
kilden bruker

stemmer
4

Gi kommandoen argumenter til popen som en liste:

arguments = sys.argv[1:]
cmd = [compiler_path] + arguments
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Svarte 03/11/2009 kl. 08:38
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more