Score:2

จะเปลี่ยนเส้นทางเอาต์พุตของ 'cat' ไปยังโฟลเดอร์อื่นได้อย่างไร

ธง us

ฉันมีสคริปต์ Python EulerianCycle.pyและไฟล์อินพุต euleriancycle.txt.

ฉันสามารถได้รับผลลัพธ์ที่ถูกต้องโดยการทำ py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt ลงในโฟลเดอร์ปัจจุบัน (พาย เป็นนามแฝงสำหรับ หลาม3).

อย่างไรก็ตาม ฉันมีโฟลเดอร์อื่นในโฟลเดอร์ปัจจุบันนี้ชื่อว่า เอาต์พุตซึ่งฉันต้องการให้ไฟล์เอาต์พุตทั้งหมดของฉันถูกกำกับ

ฉันพยายามแล้ว py EulerianCycle.py euleriancycle.txt | เอาต์พุตซีดี/ | แมว > euleriancycleout.txt

และ py EulerianCycle.py euleriancycle.txt | cat >เอาต์พุตซีดี/euleriancycleout.txt

ซึ่งทำให้ฉัน ท่อแตก ข้อผิดพลาด.

Score:7
ธง hr

ถ้า py EulerianCycle.py euleriancycle.txt เขียนไปยังสตรีมเอาท์พุตมาตรฐาน (ซึ่งฉันคิดว่าเป็นเช่นนั้น เพราะไม่เช่นนั้นคุณจะไม่สามารถไปป์ได้ แมว) แล้ว แมว ไม่จำเป็นทั้งหมดที่นี่ - คุณสามารถเปลี่ยนเส้นทางเอาต์พุตมาตรฐานได้โดยตรง โดยระบุเส้นทางแบบสัมบูรณ์หรือแบบสัมพัทธ์ไปยังไฟล์เอาต์พุตของคุณ:

py EulerianCycle.py euleriancycle.txt > เอาต์พุต/euleriancycleout.txt

(หมายเหตุ: ไดเร็กทอรี เอาท์พุต/ ต้องมีอยู่แล้ว)


คำสั่งอื่นๆ ของคุณไม่ทำงานอย่างที่คุณคิด

  • ใน py EulerianCycle euleriancycle.txt > cat euleriancycleout.txtเชลล์จะสร้างไฟล์ชื่อ แมว ในไดเร็กทอรีปัจจุบัน และเปลี่ยนเส้นทางเอาต์พุตของ py EulerianCycle ถึงมันผ่านไป ทั้งสอง euleriancycle.txt และ euleriancycleout.txt เป็นอาร์กิวเมนต์อินพุต

  • ใน py EulerianCycle.py euleriancycle.txt | cat >เอาต์พุตซีดี/euleriancycleout.txtเชลล์จะสร้างไฟล์ชื่อ ซีดี ในไดเรกทอรีปัจจุบัน แมว อ่าน เอาต์พุต/euleriancycleout.txt และเขียนลงไฟล์ ซีดีโดยไม่สนใจอินพุตมาตรฐานจากท่อ (แมว อ่านเฉพาะอินพุตมาตรฐานเมื่อไม่มีไฟล์อินพุตหรือไฟล์ที่ชัดเจน -).

บางทีสิ่งที่คุณตั้งเป้าไว้ที่นี่ก็คือการไพพ์เอาต์พุตไปยัง a เปลือกย่อย ชอบ:

py EulerianCycle.py euleriancycle.txt | (เอาต์พุตซีดี cat > euleriancycleout.txt)

หรือ

py EulerianCycle.py euleriancycle.txt | (เอาต์พุตซีดี && cat > euleriancycleout.txt)

ที่นี่, แมว อ่านอินพุตมาตรฐานของ subshell - ซึ่งจัดเตรียมโดยไพพ์ - หลังจากเปลี่ยนเป็นไดเร็กทอรีเป้าหมาย รุ่นที่สองเท่านั้นที่สร้าง euleriancycleout.txt ถ้า ซีดี คำสั่งสำเร็จ; อันดับแรกสร้างในไดเร็กทอรีปัจจุบันหากไฟล์ ซีดี ล้มเหลว

mook765 avatar
cn flag
จะดีมากถ้าคุณสามารถเพิ่มบางอย่างเกี่ยวกับข้อผิดพลาดไปป์เสียเริ่มต้นซึ่งฉันคิดว่าเกิดขึ้นเนื่องจาก `cd`-shell-builtin ซึ่งไม่ยอมรับ std-in
trinity avatar
us flag
ตกลงใช่มันสมเหตุสมผล รหัสของคุณทำงานได้ตามที่ตั้งใจไว้ ฉันยังเห็นไฟล์สุ่มชื่อ "cd" ใน cwd ขอบคุณที่อธิบายการกระทำที่ไม่ได้ตั้งใจของคำสั่งที่ฉันพยายามเช่นกัน สำหรับ @mook765 ข้อผิดพลาดท่อแตกมีดังนี้: py EulerianCycle.py euleriancycle.txt | cat >เอาต์พุตซีดี/euleriancycleout.txt Traceback (การโทรครั้งล่าสุดล่าสุด): ไฟล์ "/home/user/.../EulerianCycle.py", บรรทัดที่ 39, ใน พิมพ์ ('->'.join (eulerian_cycle (กราฟ))) BrokenPipeError: [Errno 32] ท่อแตก
hr flag
@Rukhan น่าจะเป็นเพราะ `cat` กำลังอ่าน (แทนที่จะเขียนถึง) ไฟล์เอาต์พุตที่ต้องการ ดังนั้นจึงไม่มีการสังเกตว่าจริง ๆ แล้วอ่านว่าโปรแกรม python ของคุณส่งอะไรลงไป
trinity avatar
us flag
@steeldriver เข้าใจแล้ว! ไม่ทราบว่า cat ใช้สำหรับ stdin อย่างชัดเจนเช่น cat EulerianCycle.py ซึ่งฉันพยายามทำให้มันอ่าน stdout และส่งมันลงไปที่ท่อ
hr flag
@Trinity `cat` จะทำเช่นนั้น - หากคุณไม่ให้ไฟล์อินพุตหรือให้ `-` เป็นไฟล์อินพุตหลอก แต่ที่นี่ไม่จำเป็น
trinity avatar
us flag
@steeldriver กล่าวด้วยความขอบคุณ ขอให้มีความสุขมากๆ!
Score:1
ธง it

นอกจากนี้ คุณสามารถใช้:

EulerianCycle.py | ที euleriancycleout.txt

เพื่อส่งเนื้อหาไปยังไฟล์ข้อความและไปยัง stdout พร้อมกันใน 2 สตรีมแยกกัน กล่าวอีกนัยหนึ่งเนื้อหาจะจบลงทั้งในไฟล์ข้อความและพิมพ์ในเทอร์มินัล

ฉันทำแบบนี้เสมอเพราะมันแสดงให้ฉันเห็นว่าเขียนอะไร และช่วยให้ฉันไม่ต้องเปิดเสียงเรียกเข้าเพื่อตรวจสอบงานของฉัน

Nate T avatar
it flag
หมายเหตุ: สิ่งนี้มีไว้เพื่อให้บริบทเพิ่มเติมเพื่อสนับสนุนคำตอบข้างต้นเท่านั้น
trinity avatar
us flag
ขอบคุณสำหรับข้อมูล มีประโยชน์จริงๆ!
Score:-1
ธง us

คิดออกฉันสามารถใช้ py EulerianCycle.py euleriancycle.txt | แมว > euleriancycleout.txt | mv -t เอาต์พุต/ euleriancycleout.txt

หรือ

py EulerianCycle.py euleriancycle.txt | cat > euleriancycleout.txt & mv -t เอาต์พุต/ euleriancycleout.txt

ยังคงเปิดรับคำสั่งที่เป็นไปได้ซึ่งจะทำสิ่งนี้อย่างรัดกุมยิ่งขึ้น :)

แก้ไข: รหัสที่แสดงไม่มีประสิทธิภาพ ดูคำตอบที่มีเครื่องหมายกาเครื่องหมายสีเขียว

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา