Puncte:2

Cum se redirecționează rezultatul „cat” într-un folder diferit?

drapel us

Am un script Python, EulerianCycle.pyși un fișier de intrare, euleriancycle.txt.

Sunt capabil să obțin rezultatele corecte făcând py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt în folderul curent (py este un alias pentru python3).

Totuși, am un alt folder în acest curent numit iesiri, către care vreau să fie direcționate toate fișierele mele de ieșire.

Am încercat py EulerianCycle.py euleriancycle.txt | ieșiri cd/ | pisică > euleriancycleout.txt

Și py EulerianCycle.py euleriancycle.txt | cat >cd outputs/euleriancycleout.txt

care îmi oferă țeavă spartă eroare.

Puncte:7
drapel hr

Dacă py EulerianCycle.py euleriancycle.txt scrie în fluxul de ieșire standard (ceea ce presupun că face, deoarece altfel nu l-ați putea trimite la pisică) atunci pisică este complet de prisos aici - puteți redirecționa direct ieșirea standard, specificând calea absolută sau relativă către fișierul de ieșire:

py EulerianCycle.py euleriancycle.txt > outputs/euleriancycleout.txt

(notă: directorul iesiri/ trebuie să existe deja).


Niciuna dintre celelalte comenzi ale tale nu funcționează așa cum ți-ai putea imagina.

  • în py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt, shell-ul creează un fișier numit pisică în directorul curent și redirecționează rezultatul py EulerianCycle la ea, trecând ambii euleriancycle.txt și euleriancycleout.txt lui ca argumente de intrare.

  • în py EulerianCycle.py euleriancycle.txt | cat >cd outputs/euleriancycleout.txt, shell-ul creează un fișier numit CD în directorul curent, pisică citeste outputs/euleriancycleout.txt și îl scrie în fișier CD, ignorând intrarea standard de la conductă (pisică citește doar intrarea standard atunci când nu i se oferă niciun fișier de intrare sau un explicit -).

Poate că ceea ce țintii aici a fost să conduci ieșirea către a subshell ca:

py EulerianCycle.py euleriancycle.txt | (ieșiri CD; cat > euleriancycleout.txt)

sau

py EulerianCycle.py euleriancycle.txt | (ieșiri CD && cat > euleriancycleout.txt)

Aici, pisică citește intrarea standard a subshell-ului - care este furnizată de conductă - după schimbarea în directorul țintă. A doua versiune doar creează euleriancycleout.txt dacă CD comanda reușește; primul îl creează în directorul curent dacă CD eșuează.

mook765 avatar
drapel cn
Ar fi grozav dacă ați putea adăuga ceva despre eroarea inițială a conductei sparte, care cred că apare din cauza `cd`-shell-builtin care nu acceptă std-in.
trinity avatar
drapel us
bine da asta are sens. Codul dvs. funcționează conform intenției. De asemenea, am văzut un fișier aleatoriu numit „cd” în cwd. Mulțumesc pentru explicarea acțiunilor neintenționate ale comenzilor pe care le-am încercat. pentru @mook765, eroarea conductei sparte este următoarea: py EulerianCycle.py euleriancycle.txt | cat >cd outputs/euleriancycleout.txt Traceback (cel mai recent apel ultimul): Fișierul „/home/user/.../EulerianCycle.py”, rândul 39, în print('->'.join(ciclul_eulerian(graf))) BrokenPipeError: [Errno 32] Teava sparta
drapel hr
@Rukhan, deci probabil că asta se datorează faptului că `cat` citește (în loc să scrie în) fișierul de ieșire dorit, deci se notează că citește de fapt ceea ce programul tău python trimite în conductă
trinity avatar
drapel us
@steeldriver Am inteles! Nu mi-am dat seama că utilizarea pisicii este pentru stdin în mod explicit ca cat EulerianCycle.py, unde încercam să-l fac să citească stdout și să-l trimit pe o conductă
drapel hr
@Trinity `cat` va face asta - dacă fie nu îi dați niciun fișier de intrare, fie îi dați `-` ca pseudo fișier de intrare. Dar nu este nevoie aici.
trinity avatar
drapel us
@steeldriver a notat cu mulțumiri, să aveți unul grozav!
Puncte:1
drapel it

În plus, puteți utiliza:

EulerianCycle.py | tee euleriancycleout.txt

pentru a trimite conținutul la fișierul text și a stdout simultan în 2 fluxuri separate. Cu alte cuvinte, conținutul va ajunge atât în ​​fișierul text, cât și imprimat în terminal.

O fac întotdeauna în acest fel, deoarece îmi arată ce a scris și mă scutește de a deschide vim pentru a-mi verifica munca.

Nate T avatar
drapel it
Notă: Acest lucru este menit doar să ofere un context suplimentar, în sprijinul răspunsului de mai sus.
trinity avatar
drapel us
Multumesc pentru informatii, foarte utile!
Puncte:-1
drapel us

Mi-am dat seama că pot folosi py EulerianCycle.py euleriancycle.txt | pisică > euleriancycleout.txt | mv -t outputs/ euleriancycleout.txt

SAU

py EulerianCycle.py euleriancycle.txt | cat > ieșiri euleriancycleout.txt și mv -t/ euleriancycleout.txt

Încă deschis la o posibilă comandă care va face acest lucru mai concis. :)

editează: codul prezentat nu este eficient, vezi răspunsul marcat cu bifa verde

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.