06. januar 2013 - 23:28Der er
23 kommentarer og 1 løsning
Afvikling af program fra .bat fil
Forstår det ikke, har normalt aldrig problemer med DOS, men her er filmen knækket. Jeg skal afvikle følgende linie fra en batch fil c:\python27\python.exe c:\python27\py\deltapvoutput.py > c:\python27\py\solar.log 2>%1
Men den vil ikke, selvom jeg laver et ekstra % før 1 så den ikke tror det er et argument. Har prøvet med " før og efter, midt i, osv osv.
Nej, %1 peger på et argument til python, hvis jeg laver en batchfil med %1 til slut, så forventer bat filen at jeg sender et argument med når jeg eksekverer bat filen, og det gør jeg jo ikke.
Eerhhh???? Kunne du give et eksempel i ovennævnte linie, jeg har altid bare sat 2 % ind, så virkede det, men ikke i dette tilfælde. Jeg kan fyre linien af i en cmd, og få det rigtige udfald, bare ikke fra en batch fil :-(
Og det skulle hjælpe mig??? Jeg beder om hjælp til at få den kommando linie jeg kan eksekvere i en dos prompt, og som genererer det ønskede output, sat ind i en batch fil, så det fungerer. Så nej, jeg ønsker ikke at smide output væk, for det virker jo i en almindelig kommando prompt, så jeg forstår ikke hvor du vil hen. Var det ikke nemmere bare at give din fortolkning af hvordan det burde se ud i en bat fil? Så tester jeg det og ser om det fungerer, og giver dig point efter det.
Du skal jo bare forestille dig at hvis jeg åbner en dos prompt, og skriver den linie, så for jeg det ønskede resultat. Men det for jeg ikke hvis jeg smider den samme linie i en .bat fil. Det er det der undrer mig.
Til RogerWilco, det hjalp ikke, så afvikles kommandoen ikke som den skal. Til Iclemens, det gør den hvis jeg afvikler det fra en .bat fil, men ikke hvis jeg gør det direkte i en dos prompt, og det er her problemet ligger. den skal ikke lave en %1 fil, men kun den solar.log som der pipes ind i.
Du mener det omvendt, ikke? Ellers giver det ikke mening. Den burde lave %1-filen uanset fremgangsmåde. At den måske ikke oprettes, kan skyldes rettighedsproblemer (der hvor bat-filen/kommandoen afvkiles fra).
Som jeg skrev i #7, hvis fejl-output (som 2> betyder) skal smides væk, så skal det være 2>nul. Lige nu skriver cmd fejl-output til %1 (hvis der ikke er noget output, så er filen nok bare tom).
Mht min første post... Når du har sådan en kommandolinje, så er det ikke et argument til python, men en kommando til cmd om at output skal omdirigeres.
Til RogerWilco, det hjalp ikke, så afvikles kommandoen ikke som den skal. Til Iclemens, det gør den hvis jeg afvikler det fra en .bat fil, men ikke hvis jeg gør det direkte i en dos prompt, og det er her problemet ligger. den skal ikke lave en %1 fil, men kun den solar.log som der pipes ind i.
Til RogerWilco, det hjalp ikke, så afvikles kommandoen ikke som den skal. Til Iclemens, det gør den hvis jeg afvikler det fra en .bat fil, men ikke hvis jeg gør det direkte i en dos prompt, og det er her problemet ligger. den skal ikke lave en %1 fil, men kun den solar.log som der pipes ind i.
Til RogerWilco, det hjalp ikke, så afvikles kommandoen ikke som den skal. Til Iclemens, det gør den hvis jeg afvikler det fra en .bat fil, men ikke hvis jeg gør det direkte i en dos prompt, og det er her problemet ligger. den skal ikke lave en %1 fil, men kun den solar.log som der pipes ind i.
Problemet er jo at det virker som det skal når man bare indtaster det i en dos prompt, men ikke når man kalder en cmd eller fra et andet program såsom en cron.
Har løst problemet her og nu, men det er en laaaang omvej, der må findes en nemmere vej. Jeg har lavet en inverter.bat fil hvori det står c:\python27\python.exe %1, da vi jo ved at %1 modtager argumenter udefra når man eksekverer et dos script. Så lavede jeg en test.bat som indeholder inverter c:\python27\py\deltapvoutput.py > c:\python27\py\solar.log "2>%1". Dette gør jo så at når jeg starter test.bat kalder den inverter.bat men med argumentet c:\python27\py\deltapvoutput.py > c:\python27\py\solar.log "2>%1", og det laver filen solar.log med de data i den der skal stå. Men det MÅ kunne gøres nemmere.
Har du prøvet i inverter.bat at indsætte et par ekstra linjer i toppen: echo arg: %1 pause
Så burde du kunne se, at det eneste argument der slipper gennem fra test.bat til inverter.bat er "c:\python27\py\deltapvoutput.py". Resten vil blive opfattet som %2, %3 osv. Det burde dog betyde mindre i dette tilfælde, da redirect af output så sker fra kaldet til inverter.bat og ikke kaldet til python.exe.
Hvis fejlbeskeder også skal sendes til solar.log, SKAL det være 2>&1. Hvad er det der ikke virker i dette tilfælde - er det fejlbeskeder der mangler, eller fortolkning af py-filen der fejler?
Hvad hvis du laver den oprindelige linje om til: c:\python27\python.exe c:\python27\py\deltapvoutput.py > c:\python27\py\solar.log 2>c:\python27\py\solar.log
Hvis du kalder bat-filen for solar.bat og lægger den i samme mappe som py-filen, kan du i bat-filen skrive noget i stil med: c:\python27\python.exe deltapvoutput.py >%~dpn0.log 2>&1 Så burde output (både alm. og fejl) havne i en logfil med navnet solar.log.
Hov, jeg er taknemmelig for jeres input, smæk lige en besked hvor i går efter svaret, så skal jeg nok fordele nogle points :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.