Avatar billede syntaxen Novice
06. januar 2013 - 23:28 Der 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.

Any idears
Avatar billede lclemens Nybegynder
07. januar 2013 - 00:00 #1
Hvad forventer du at %1 indeholder da?

%1 peger på første argument til bat-filen
Avatar billede syntaxen Novice
07. januar 2013 - 00:07 #2
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.
Avatar billede lclemens Nybegynder
07. januar 2013 - 00:12 #3
Så dine >-tegn skal altså ikke fortolkes af cmd? Så skal de escapes med et ^-tegn.
Avatar billede syntaxen Novice
07. januar 2013 - 00:16 #4
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 :-(
Avatar billede lclemens Nybegynder
07. januar 2013 - 00:45 #5
2>

får cmd til at omdirigere fejl-output. Så hvis du bare afvikler den linje direkte i cmd, så omdirigerer du fejl-output til %1. Er vi enige om det?
Avatar billede syntaxen Novice
07. januar 2013 - 00:51 #6
Hmmm, ikke helt, udfaldet af det kald er en fil kaldet solar.log med de ønskede output indeni.
Avatar billede lclemens Nybegynder
07. januar 2013 - 00:55 #7
Prøver du at smide evt. uønsket output væk? :-)

Så er det 2>nul
Avatar billede syntaxen Novice
07. januar 2013 - 01:03 #8
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.
Avatar billede lclemens Nybegynder
07. januar 2013 - 01:12 #9
Jeg kan ikke give dig min fortolkning, for jeg forstår åbenbart ikke din kommando-linje :-)
Avatar billede syntaxen Novice
07. januar 2013 - 01:16 #10
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.
Avatar billede lclemens Nybegynder
07. januar 2013 - 01:25 #11
Når du afvikler direkte i cmd, får du så ikke en fil i samme mappe ved navn "%1" ?
Avatar billede RogerWilco Seniormester
07. januar 2013 - 06:31 #12
Prøv at lave %-tegnet om til et &-tegn.
Avatar billede syntaxen Novice
07. januar 2013 - 11:54 #13
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.
Avatar billede lclemens Nybegynder
07. januar 2013 - 12:00 #14
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).
Avatar billede lclemens Nybegynder
07. januar 2013 - 12:03 #15
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.
Avatar billede syntaxen Novice
07. januar 2013 - 12:12 #16
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.
Avatar billede syntaxen Novice
07. januar 2013 - 12:30 #17
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.
Avatar billede syntaxen Novice
07. januar 2013 - 17:20 #18
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.
Avatar billede RogerWilco Seniormester
07. januar 2013 - 19:14 #19
Hvis du skal have både stdout og stderr til filen solar.log, skal der bruges &-tegn:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true

Hvis det ikke virker, er der noget galt med pythons parser.
Avatar billede syntaxen Novice
07. januar 2013 - 22:21 #20
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.
Avatar billede syntaxen Novice
07. januar 2013 - 22:47 #21
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.
Avatar billede RogerWilco Seniormester
08. januar 2013 - 18:34 #22
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.
Avatar billede syntaxen Novice
09. januar 2013 - 18:46 #23
Det dur heller ikke, meget møstisk.
Den bliver bare ikke eksekveret som den burde.
Stopper tråden her, jeg skal fanme kunne finde ud af det selv :-)
Avatar billede syntaxen Novice
09. januar 2013 - 18:48 #24
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 :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester