คำถามติดแท็ก stdout

stdout เป็นชื่อของ descriptor ไฟล์เอาต์พุตเริ่มต้นของกระบวนการ เนื่องจากไม่มีอะไรพิเศษเกี่ยวกับ "stdout" คุณ * ไม่ควรใช้แท็กนี้ ใช้แท็ก [io-redirection] สำหรับคำถามเกี่ยวกับวิธีเปลี่ยนเส้นทางเอาต์พุตใช้ [file-descriptors] สำหรับคำถามเกี่ยวกับวิธีจัดการตัวอธิบายไฟล์ใช้ [lock] สำหรับคำถามเกี่ยวกับการล็อกไฟล์และใช้ [files] สำหรับคำถามทั่วไปเกี่ยวกับ การทำงานของไฟล์

9
จะไม่ทำสิ่งใดตลอดไปอย่างสง่างาม?
ผมมีโปรแกรมที่ก่อให้ข้อมูลที่เป็นประโยชน์ในแต่ยังอ่านจากstdout stdinฉันต้องการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์โดยไม่ต้องให้อะไรกับอินพุตมาตรฐาน จนถึงตอนนี้ดีมาก: ฉันทำได้: program > output และไม่ทำอะไรเลยใน tty อย่างไรก็ตามปัญหาคือฉันต้องการทำในพื้นหลัง ถ้าฉันทำ: program > output & โปรแกรมจะถูกระงับ ("ถูกระงับ (อินพุต tty)") ถ้าฉันทำ: program < /dev/null > output & โปรแกรมหยุดทำงานทันทีเนื่องจากถึง EOF ดูเหมือนว่าสิ่งที่ฉันต้องการก็คือการเข้าไปในท่อสิ่งที่ไม่ได้ทำอะไรสำหรับจำนวนเงินที่แน่นอนของเวลาและไม่ได้อ่านprogram stdinแนวทางต่อไปนี้ใช้ได้ผล: while true; do sleep 100; done | program > output & mkfifo fifo && cat fifo | program > output …

5
รายงานความคืบหน้า / ข้อมูลการบันทึกเป็นของ stderr หรือ stdout หรือไม่?
มี POSIX, GNU อย่างเป็นทางการหรือแนวทางอื่น ๆ หรือไม่ว่ารายงานความคืบหน้าและข้อมูลการบันทึก (สิ่งต่าง ๆ เช่น "Doing foo; foo done") ควรพิมพ์ออกมาหรือไม่? โดยส่วนตัวแล้วฉันมักจะเขียนถึง stderr เพื่อที่ฉันจะสามารถเปลี่ยนเส้นทาง stdout และรับเอาท์พุทจริงของโปรแกรมเท่านั้น ฉันเพิ่งบอกว่านี่ไม่ใช่วิธีปฏิบัติที่ดีเนื่องจากรายงานความคืบหน้าไม่ใช่ข้อผิดพลาดจริง ๆ และควรพิมพ์เฉพาะข้อความข้อผิดพลาดไปยัง stderr ทั้งสองตำแหน่งมีเหตุผลและแน่นอนว่าคุณสามารถเลือกอย่างใดอย่างหนึ่งขึ้นอยู่กับรายละเอียดของสิ่งที่คุณกำลังทำอยู่ แต่ฉันอยากจะรู้ว่ามีมาตรฐานที่ยอมรับกันโดยทั่วไปสำหรับเรื่องนี้หรือไม่ ฉันไม่สามารถค้นหากฎเฉพาะใน POSIX มาตรฐานการเข้ารหัสของ GNU หรือรายการแนวทางปฏิบัติที่ดีที่สุดอื่น ๆ เรามีคำถามที่คล้ายกันสองสามข้อ แต่พวกเขาไม่ได้แก้ไขปัญหาที่แน่นอนนี้: เมื่อใดที่จะใช้การเปลี่ยนเส้นทางไปยัง stderr ในเชลล์สคริปต์ : คำตอบที่ได้รับการยอมรับแสดงให้เห็นสิ่งที่ฉันมักจะทำเอาท์พุทสุดท้ายของโปรแกรมไว้ที่ stdout และทุกอย่างจะเป็น stderr อย่างไรก็ตามนี่เป็นเพียงความเห็นของผู้ใช้แม้ว่าจะได้รับการสนับสนุนจากการขัดแย้ง ข้อความการใช้งานควรไปที่ stderr หรือ stdout หรือไม่ : นี่เป็นข้อความเฉพาะสำหรับช่วยเหลือข้อความ แต่อ้างอิงมาตรฐานการเข้ารหัสของ …
75 posix  stdout  gnu  stderr  standard 

6
ฉันสามารถไปป์ stdout บนเซิร์ฟเวอร์หนึ่งเพื่อ stdin บนเซิร์ฟเวอร์อื่นได้หรือไม่
stdoutบนเซิร์ฟเวอร์ CentOS หนึ่งเซิร์ฟเวอร์ต้องถูกไพพ์ไปstdinยังเซิร์ฟเวอร์ CentOS อื่น เป็นไปได้ไหม ปรับปรุง ScottPack, MikeyB และ jofel ล้วนมีคำตอบที่ถูกต้อง ฉันได้รับคำตอบให้กับสกอตต์เพราะแม้ว่าคำถามของฉันไม่ได้ระบุความปลอดภัยเป็นข้อกำหนด แต่ก็ดีที่จะปลอดภัย อย่างไรก็ตามคำแนะนำของเพื่อนอีกสองคนนั้นก็ใช้ได้เช่นกัน
74 pipe  stdout  stdin 

6
ฉันสามารถกำหนดค่าเปลือกของฉันเพื่อพิมพ์ STDERR และ STDOUT ในสีที่ต่างกันได้หรือไม่?
ฉันต้องการตั้งค่าเทอร์มินัลของฉันเพื่อให้stderrพิมพ์ในสีที่แตกต่างกว่าstdout; อาจจะเป็นสีแดง นี่จะทำให้ง่ายต่อการบอกความแตกต่าง มีวิธีกำหนดค่านี้.bashrcไหม ถ้าไม่เป็นไปได้ไหม หมายเหตุ : คำถามนี้รวมกับอีกว่าขอให้stderr, stdout และผู้ใช้ป้อนก้องจะเป็นผลลัพธ์ใน3 สีที่แตกต่างกัน คำตอบอาจตอบคำถามใดคำถามหนึ่ง

4
เขียน Python stdout เป็นไฟล์ทันที
เมื่อพยายามเขียน stdout จากสคริปต์ Python ไปยังไฟล์ข้อความ ( python script.py > log) ไฟล์ข้อความจะถูกสร้างขึ้นเมื่อคำสั่งเริ่มทำงาน แต่เนื้อหาจริงจะไม่ถูกเขียนจนกว่าสคริปต์ Python จะเสร็จสิ้น ตัวอย่างเช่น: script.py: import time for i in range(10): print('bla') time.sleep(5) พิมพ์ไปยัง stdout ทุก 5 วินาทีเมื่อเรียกด้วยpython script.pyแต่เมื่อฉันโทรpython script.py > logขนาดของไฟล์บันทึกจะเป็นศูนย์จนกระทั่งสคริปต์เสร็จสิ้น เป็นไปได้หรือไม่ที่จะเขียนลงในไฟล์บันทึกโดยตรงเช่นคุณสามารถติดตามความคืบหน้าของสคริปต์ (เช่นใช้tail)? แก้ไขมันปรากฎว่าpython -u script.pyเป็นการหลอกลวงฉันไม่รู้เกี่ยวกับบัฟเฟอร์ของ stdout
51 shell  python  stdout 

5
เนื้อหาไฟล์ที่ส่งออกในขณะที่พวกเขาเปลี่ยน
ฉันต้องการส่งออกเนื้อหาของไฟล์ในขณะที่มีการเปลี่ยนแปลงตัวอย่างเช่นถ้าฉันมีไฟล์foobarและฉันต้องการ: magic_command foobar เทอร์มินัลปัจจุบันควรแสดงเนื้อหาของไฟล์และรอจนกระทั่งฉันไม่รู้ฉันกด ^ C ถ้าเป็นเช่นนั้นจากเทอร์มินัลอื่นฉัน: echo asdf >> foobar เทอร์มินัลแรกควรแสดงบรรทัดที่เพิ่มใหม่นอกเหนือจากเนื้อหาไฟล์ต้นฉบับ (แน่นอนเนื่องจากฉันไม่ได้กด ^ C) ฉันจะทำเครื่องหมายว่าเป็นการบ้านเนื่องจากฉันต้องการสำรวจและเรียนรู้ลินุกซ์ แต่ไม่ใช่การบ้านมันเป็นเพียงความอยากรู้อยากเห็นของฉัน
47 terminal  tail  stdout 


6
วิธีหลอกให้คำสั่งคิดว่าเอาต์พุตกำลังไปที่เทอร์มินัล
เมื่อได้รับคำสั่งที่เปลี่ยนพฤติกรรมเมื่อเอาต์พุตกำลังส่งไปยังเทอร์มินัล (เช่นสร้างเอาต์พุตสี) เอาต์พุตนั้นสามารถเปลี่ยนเส้นทางในไพพ์ไลน์ได้อย่างไรในขณะที่รักษาพฤติกรรมที่เปลี่ยนไป จะต้องมียูทิลิตี้สำหรับสิ่งที่ฉันไม่ทราบ คำสั่งบางคำสั่งเช่นgrep --color=alwaysมีแฟล็กตัวเลือกเพื่อบังคับให้ทำงาน แต่คำถามคือวิธีการแก้ไขโปรแกรมที่ต้องอาศัยการทดสอบ descriptor ไฟล์เอาต์พุตเพียงอย่างเดียว ถ้ามันเป็นเรื่องสำคัญเปลือกของฉันอยู่bashบน Linux
38 shell  pipe  utilities  stdout  pty 

4
วิธีเรียกใช้ตัวแก้ไข vim และไพพ์เอาต์พุตเพื่อ bash
บางครั้งฉันจำเป็นต้องเขียนข้อความจากนั้นส่งข้อความไปยังคำสั่งอื่น เวิร์กโฟลว์ตามปกติของฉันมีลักษณะดังนี้: vim # I edit and save my file as file.txt cat file.txt | pandoc -o file.pdf # pandoc is an example rm file.txt ฉันพบว่ามันยุ่งยากและพยายามเรียนรู้การเขียนสคริปต์ทุบตีฉันต้องการทำให้กระบวนการง่ายขึ้นมากโดยการเขียนคำสั่งที่เปิดไฟเอดิเตอร์และเมื่อเอดิเตอร์ปิดไพพ์เอาต์พุตของเอดิเตอร์เพื่อ stdout quickedit | pandoc -o file.pdfแล้วฉันจะสามารถเรียกใช้คำสั่งเป็น ฉันไม่แน่ใจว่ามันจะทำงานอย่างไร ฉันได้เขียนฟังก์ชันเพื่อทำให้สิ่งนี้เป็นไปโดยอัตโนมัติโดยทำตามขั้นตอนการทำงานที่ถูกต้องข้างต้นรวมถึงการเพิ่มเติมบางอย่าง มันสร้างสตริงแบบสุ่มเพื่อทำหน้าที่เป็นชื่อไฟล์และส่งผ่านไปยังกลุ่มเมื่อฟังก์ชันถูกเรียกใช้ เมื่อผู้ใช้ออกเป็นกลุ่มโดยการบันทึกไฟล์ฟังก์ชั่นพิมพ์ไฟล์ไปยังคอนโซลแล้วลบไฟล์ function quickedit { filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c …
34 vim  pipe  stdout 

5
วิธีเปลี่ยนเส้นทาง stdout ไปยังไฟล์และ stdout + stderr ไปยังไฟล์อื่นได้อย่างไร
ฉันจะประสบความสำเร็จได้อย่างไร cmd >> file1 2>&1 1>>file2 นั่นคือ stdout และ stderr ควรเปลี่ยนเส้นทางไปที่หนึ่งไฟล์ (file1) และ stdout เท่านั้น (file2) ควรเปลี่ยนเส้นทางไปที่อื่น (ทั้งในโหมดต่อท้าย)?

8
คำสั่งไปยังเนื้อหาไฟล์ที่ส่งออกไปยัง stdout?
ฉันรู้ว่าcatสามารถทำสิ่งนี้ได้ แต่จุดประสงค์หลักของมันคือการต่อข้อมูลแทนที่จะแสดงเนื้อหา ฉันยังรู้เกี่ยวกับlessและmoreแต่ฉันกำลังมองหาบางอย่างที่เรียบง่าย ( ไม่ใช่เพจเจอร์ ) ที่เพิ่งส่งออกเนื้อหาของไฟล์ไปยังเทอร์มินัลและมันถูกสร้างขึ้นมาเพื่อสิ่งนี้โดยเฉพาะหากมีสิ่งนั้น
28 cat  less  stdout 

3
การเปลี่ยนเส้นทาง stdout และ stderr ไปยังไฟล์เดียวกันนั้นปลอดภัยหรือไม่โดยไม่มีการคัดลอกไฟล์ descriptor?
ฉันเริ่มต้นในไดเรกทอรีว่างเปล่า $ touch aFile $ ls aFile จากนั้นฉันก็lsโต้เถียงกันสองข้อข้อหนึ่งข้อหนึ่งไม่ได้อยู่ในไดเรกทอรีนี้ outputฉันเปลี่ยนเส้นทางทั้งลำธารส่งออกไปยังไฟล์ชื่อ ฉันใช้>>เพื่อหลีกเลี่ยงการเขียนพร้อมกัน $ ls aFile not_exist >>output 2>>output $ cat output ls: cannot access 'not_exist': No such file or directory aFile ซึ่งดูเหมือนว่าจะทำงาน มีอันตรายกับวิธีนี้หรือไม่?

2
ใน bash script วิธีจับ stdout ทีละบรรทัด
ในสคริปต์ทุบตีฉันต้องการจับเอาท์พุทมาตรฐานของบรรทัดคำสั่งแบบยาวต่อบรรทัดเพื่อให้สามารถวิเคราะห์และรายงานได้ในขณะที่คำสั่งเริ่มต้นยังคงทำงานอยู่ นี่เป็นวิธีที่ซับซ้อนที่ฉันสามารถจินตนาการได้: # Start long command in a separated process and redirect stdout to temp file longcommand > /tmp/tmp$$.out & #loop until process completes ps cax | grep longcommand > /dev/null while [ $? -eq 0 ] do #capture the last lines in temp file and determine if there is …
26 bash  process  stdout 

6
ฉันจะทำให้โปรแกรมหลามทำงานอย่างไรเช่นเครื่องมือยูนิกซ์ที่เหมาะสม?
ฉันมีสคริปต์ Python อยู่สองสามตัวและฉันก็กำลังเขียนมันใหม่ ฉันมีปัญหาเดียวกันกับพวกเขาทั้งหมด ฉันไม่เห็นได้ชัดว่าจะเขียนโปรแกรมอย่างไรเพื่อให้พวกเขาทำตัวเหมือนเครื่องมือยูนิกซ์ที่เหมาะสม เพราะสิ่งนี้ $ cat characters | progname และนี่ $ progname characters ควรสร้างผลลัพธ์เดียวกัน สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถพบได้ใน Python คือไลบรารี fileinput น่าเสียดายที่ฉันไม่เห็นวิธีเขียนสคริปต์ Python ของฉันอีกครั้งซึ่งทั้งหมดมีลักษณะดังนี้: #!/usr/bin/env python # coding=UTF-8 import sys, re for file in sys.argv[1:]: f = open(file) fs = f.read() regexnl = re.compile('[^\s\w.,?!:;-]') rstuff = regexnl.sub('', fs) f.close() print rstuff …

3
ฉันจะ จำกัด ความเร็วเอาต์พุตของ stdout ได้อย่างไร
ผมใช้ CentOS 5.7 stdoutและฉันมีอรรถประโยชน์สำรองข้อมูลที่มีตัวเลือกในการทุ่มตลาดแฟ้มสำรองข้อมูลไปยัง ไฟล์สำรองมีขนาดค่อนข้างใหญ่ (หลายกิกะไบต์) เป้าหมายคือระบบไฟล์ SSHFS เพื่อให้แน่ใจว่าฉันจะไม่แบนด์วิดท์และลดประสิทธิภาพของเครือข่ายฉันต้องการ จำกัด ความเร็วในการเขียนข้อมูลลงใน "ดิสก์" ฉันจะจำกัดความสามารถของstdoutจำนวนไบต์ได้อย่างไร ตัวอย่างเช่นการจำกัดความสามารถของกระบวนการในการเขียนถึงประมาณ 768Bps
24 hard-disk  io  stdout 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.