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

สตรีมเอาต์พุตมาตรฐาน (stdout) คือสตรีมที่โปรแกรมเขียนข้อมูลเอาต์พุต

2
ท่อทั้ง stdout และ stderr ในทุบตี?
ดูเหมือนว่าเวอร์ชั่นใหม่ของ bash จะมี&>โอเปอเรเตอร์ซึ่ง (ถ้าฉันเข้าใจถูกต้อง) ให้เปลี่ยนเส้นทางทั้ง stdout และ stderr ไปที่ไฟล์ (ต่อ&>>ท้ายไฟล์แทนเช่นเอเดรียนชี้แจง) อะไรคือวิธีที่ง่ายที่สุดในการบรรลุสิ่งเดียวกัน แต่แทนที่จะส่งไปยังคำสั่งอื่น ตัวอย่างเช่นในบรรทัดนี้: cmd-doesnt-respect-difference-between-stdout-and-stderr | grep -i SomeError ฉันต้องการให้ grep จับคู่กับเนื้อหาทั้งใน stdout และ stderr (มีประสิทธิภาพรวมเข้ากับสตรีมเดียว) หมายเหตุ : คำถามนี้ถามเกี่ยวกับการวางท่อไม่ใช่การเปลี่ยนเส้นทาง - ดังนั้นจึงไม่ใช่คำถามที่ซ้ำกันซึ่งปัจจุบันถูกทำเครื่องหมายว่าซ้ำซ้อน
156 bash  stdout  stderr  piping 

16
วิธีการปิดการใช้งานและเปิดใช้งานการบันทึกคอนโซลใน Python อีกครั้ง?
ฉันใช้โมดูลการบันทึกของ Python และฉันต้องการปิดการใช้งานการบันทึกคอนโซลในบางครั้ง แต่มันไม่ทำงาน #!/usr/bin/python import logging logger = logging.getLogger() # this gets the root logger # ... here I add my own handlers #logger.removeHandler(sys.stdout) #logger.removeHandler(sys.stderr) print logger.handlers # this will print [<logging.StreamHandler instance at ...>] # but I may have other handlers there that I want to keep logger.debug("bla …

6
จะเปิดทุกไฟล์ในโฟลเดอร์ได้อย่างไร?
ฉันมี python script parse.py ซึ่งในสคริปต์เปิดไฟล์ให้พูด file1 แล้วทำบางสิ่งบางอย่างอาจพิมพ์จำนวนอักขระทั้งหมด filename = 'file1' f = open(filename, 'r') content = f.read() print filename, len(content) ตอนนี้ฉันกำลังใช้ stdout เพื่อนำผลลัพธ์ไปยังไฟล์เอาต์พุตของฉัน - เอาต์พุต python parse.py >> output อย่างไรก็ตามฉันไม่ต้องการทำไฟล์นี้ด้วยไฟล์เองมีวิธีดูแลไฟล์ทุกไฟล์โดยอัตโนมัติหรือไม่? ชอบ ls | awk '{print}' | python parse.py >> output แล้วปัญหาคือฉันจะอ่านชื่อไฟล์จาก standardin ได้อย่างไร? หรือมีฟังก์ชั่นบิวท์อินบางตัวในการทำ ls และงานเหล่านั้นได้อย่างง่ายดาย? ขอบคุณ!
148 python  file  pipe  stdout  stdin 

9
ฉันสามารถเปลี่ยนเส้นทาง stdout ใน python เป็นสตริงบัฟเฟอร์บางประเภทได้หรือไม่
ฉันใช้ python ftplibเพื่อเขียนไคลเอนต์ FTP ขนาดเล็ก แต่ฟังก์ชั่นบางอย่างในแพ็คเกจไม่ส่งคืนเอาต์พุตสตริง แต่พิมพ์เป็นstdoutไฟล์. ฉันต้องการเปลี่ยนเส้นทางstdoutไปยังวัตถุที่ฉันจะสามารถอ่านผลลัพธ์ได้ ฉันรู้ว่าstdoutสามารถเปลี่ยนเส้นทางไปยังไฟล์ปกติได้ด้วย: stdout = open("file", "a") แต่ฉันชอบวิธีที่ไม่ใช้โลคัลไดรฟ์มากกว่า ฉันกำลังมองหาบางอย่างเช่นBufferedReaderใน Java ที่สามารถใช้เพื่อห่อบัฟเฟอร์ลงในสตรีม

10
ฉันจะล็อก stdout ของกระบวนการที่เริ่มต้นโดย start-stop-daemon ได้อย่างไร
ฉันใช้สคริปต์ init เพื่อเรียกใช้กระบวนการง่ายๆซึ่งเริ่มต้นด้วย: start-stop-daemon --start --quiet --chuid $DAEMONUSER \ --make-pidfile --pidfile $PIDFILE --background \ --exec $DAEMON $DAEMON_ARGS กระบวนการที่เรียกว่า $ DAEMON มักจะพิมพ์ข้อมูลบันทึกไปยังเอาต์พุตมาตรฐาน เท่าที่ฉันสามารถบอกได้ว่าข้อมูลนี้ไม่ได้ถูกเก็บไว้ที่ใดก็ได้ ฉันต้องการเขียนหรือต่อท้าย stdout ของ $ DAEMON ในไฟล์ที่ไหนสักแห่ง ทางออกเดียวที่ฉันรู้คือบอก start-stop-daemon ให้เรียกใช้ shellscript แทน $ DAEMON โดยตรง จากนั้นสคริปต์จะเรียก $ DAEMON และเขียนลงในไฟล์บันทึก แต่นั่นต้องใช้สคริปต์พิเศษซึ่งเช่นเดียวกับการปรับเปลี่ยน daemon เองดูเหมือนจะเป็นวิธีที่ผิดในการแก้ปัญหาทั่วไปดังกล่าว

6
บังคับให้ไลน์บัฟเฟอร์ของ stdout เมื่อส่งไปที่ที
โดยปกติจะstdoutเป็นบรรทัดบัฟเฟอร์ กล่าวอีกนัยหนึ่งคือตราบใดที่printfอาร์กิวเมนต์ของคุณจบลงด้วยการขึ้นบรรทัดใหม่คุณสามารถคาดหวังว่าจะพิมพ์บรรทัดได้ทันที teeนี้จะไม่ปรากฏการระงับเมื่อใช้ท่อเปลี่ยนเส้นทางไปยัง ฉันมีโปรแกรม C ++ aที่ส่งออกสตริงเสมอ - เทอร์มิ\nนนิ่งเป็นstdout. เมื่อรันด้วยตัวเอง ( ./a) ทุกอย่างจะพิมพ์ออกมาอย่างถูกต้องและในเวลาที่เหมาะสมตามที่คาด แต่ถ้าฉันท่อมันtee( ./a | tee output.txt) teeก็ไม่ได้พิมพ์อะไรจนกว่าจะจบการทำงานซึ่งขัดแย้งกับวัตถุประสงค์ของการใช้ ฉันรู้ว่าฉันสามารถแก้ไขได้โดยเพิ่มfflush(stdout)การดำเนินการหลังการพิมพ์แต่ละครั้งในโปรแกรม C ++ แต่มีวิธีที่ง่ายกว่านี้ไหม? มีคำสั่งที่ฉันสามารถรันได้ไหมตัวอย่างเช่นที่จะบังคับstdoutให้เป็นไลน์บัฟเฟอร์แม้ว่าจะใช้ไปป์
118 unix  buffer  pipe  stdout  tee 

3
จะจับเอาท์พุท stdout จากการเรียกฟังก์ชัน Python ได้อย่างไร
ฉันใช้ไลบรารี Python ที่ทำอะไรบางอย่างกับวัตถุ do_something(my_object) และเปลี่ยนแปลงมัน ในขณะที่ทำเช่นนั้นมันพิมพ์สถิติบางอย่างเพื่อ stdout และฉันต้องการที่จะเข้าใจข้อมูลนี้ วิธีแก้ปัญหาที่เหมาะสมคือการเปลี่ยนdo_something()เพื่อส่งคืนข้อมูลที่เกี่ยวข้อง out = do_something(my_object) แต่จะต้องใช้เวลาสักพักก่อนที่ผู้พัฒนาdo_something()จะเข้าสู่ปัญหานี้ เป็นวิธีแก้ปัญหาชั่วคราวฉันคิดถึงการแยกวิเคราะห์สิ่งที่do_something()เขียนถึง stdout ฉันจะจับเอาท์พุท stdout ระหว่างสองจุดในโค้ดได้อย่างไรเช่น start_capturing() do_something(my_object) out = end_capturing() เหรอ?
113 python  stdout  capture 

3
เปลี่ยนเส้นทางท่อ stdout ของกระบวนการย่อยใน Go
ฉันกำลังเขียนโปรแกรมใน Go ซึ่งรันเซิร์ฟเวอร์เช่นโปรแกรม (เช่น Go) ตอนนี้ฉันต้องการให้ stdout ของโปรแกรมลูกในหน้าต่างเทอร์มินัลของฉันที่ฉันเริ่มโปรแกรมหลัก วิธีหนึ่งในการทำเช่นนี้คือการใช้cmd.Output()ฟังก์ชัน แต่จะพิมพ์ stdout หลังจากออกจากกระบวนการแล้วเท่านั้น (นั่นเป็นปัญหาเนื่องจากโปรแกรมที่เหมือนเซิร์ฟเวอร์นี้ทำงานเป็นเวลานานและฉันต้องการอ่านเอาต์พุตบันทึก) ตัวแปรoutเป็นของtype io.ReadCloserและฉันไม่รู้ว่าควรทำอย่างไรกับมันเพื่อให้บรรลุภารกิจของฉันและฉันไม่พบสิ่งที่เป็นประโยชน์บนเว็บในหัวข้อนี้ func main() { cmd := exec.Command("/path/to/my/child/program") out, err := cmd.StdoutPipe() if err != nil { fmt.Println(err) } err = cmd.Start() if err != nil { fmt.Println(err) } //fmt.Println(out) cmd.Wait() } คำอธิบายเกี่ยวกับรหัส: ยกเลิกการใส่เครื่องหมายPrintlnฟังก์ชันเพื่อรับโค้ดเพื่อคอมไพล์ฉันรู้ว่านั่นPrintln(out io.ReadCloser)ไม่ใช่ฟังก์ชันที่มีความหมาย (สร้างผลลัพธ์&{3 |0 …

10
จับ stdout จากสคริปต์?
สมมติว่ามีสคริปต์ที่ทำสิ่งนี้: # module writer.py import sys def write(): sys.stdout.write("foobar") ตอนนี้สมมติว่าฉันต้องการจับเอาต์พุตของwriteฟังก์ชันและเก็บไว้ในตัวแปรเพื่อประมวลผลต่อไป วิธีแก้ปัญหาที่ไร้เดียงสาคือ: # module mymodule.py from writer import write out = write() print out.upper() แต่ไม่ได้ผล ฉันคิดวิธีแก้ปัญหาอื่นและได้ผล แต่โปรดแจ้งให้เราทราบหากมีวิธีที่ดีกว่าในการแก้ปัญหา ขอบคุณ import sys from cStringIO import StringIO # setup the environment backup = sys.stdout # #### sys.stdout = StringIO() # capture output write() out …
94 python  stdout  sys 

3
ความแตกต่างระหว่าง $ stdout และ STDOUT ใน Ruby
ใน Ruby ความแตกต่างระหว่าง$stdout(นำหน้าด้วยเครื่องหมายดอลลาร์) กับSTDOUT(ตัวพิมพ์ใหญ่ทั้งหมด) คืออะไร? เมื่อทำการเปลี่ยนทิศทางเอาต์พุตควรใช้ข้อใดและเพราะเหตุใด เดียวกันจะไปสำหรับและ$stderrSTDERR แก้ไข:เพียงแค่พบคำถามที่เกี่ยวข้อง

13
จับ stdout แบบเรียลไทม์จากกระบวนการย่อย
ฉันต้องการsubprocess.Popen()rsync.exe ใน Windows และพิมพ์ stdout ใน Python รหัสของฉันใช้งานได้ แต่ไม่สามารถตรวจจับความคืบหน้าได้จนกว่าการถ่ายโอนไฟล์จะเสร็จสิ้น! ฉันต้องการพิมพ์ความคืบหน้าสำหรับแต่ละไฟล์แบบเรียลไทม์ ตอนนี้ใช้ Python 3.1 เนื่องจากฉันได้ยินมาว่าควรจัดการ IO ได้ดีกว่า import subprocess, time, os, sys cmd = "rsync.exe -vaz -P source/ dest/" p, line = True, 'start' p = subprocess.Popen(cmd, shell=True, bufsize=64, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE) for line in p.stdout: print(">>> " + str(line.rstrip())) p.stdout.flush()

17
พิมพ์ไปที่บรรทัดเดียวกันแล้วขึ้นบรรทัดใหม่ไม่ใช่เหรอ?
โดยทั่วไปฉันต้องการทำสิ่งที่ตรงกันข้ามกับสิ่งที่ผู้ชายคนนี้ทำ ... ฮิฮิ Python Script: พิมพ์บรรทัดใหม่ทุกครั้งเพื่อเชลล์แทนที่จะอัปเดตบรรทัดที่มีอยู่ ฉันมีโปรแกรมที่บอกฉันว่ามันไปได้ไกลแค่ไหน for i in some_list: #do a bunch of stuff. print i/len(some_list)*100," percent complete" ดังนั้นถ้า len (some_list) เป็น 50 ฉันจะพิมพ์บรรทัดสุดท้ายได้ 50 ครั้ง ฉันต้องการพิมพ์หนึ่งบรรทัดและอัปเดตบรรทัดนั้นต่อไป ฉันรู้ว่านี่อาจเป็นคำถามที่แย่ที่สุดที่คุณจะอ่านทั้งวัน ฉันไม่สามารถหาคำสี่คำที่ฉันต้องใส่ใน Google เพื่อให้ได้คำตอบ อัพเดท! ฉันลองทำตามคำแนะนำของ mvds ซึ่งคิดว่าถูกต้อง รหัสใหม่ print percent_complete," \r", เปอร์เซ็นต์ที่สมบูรณ์เป็นเพียงสตริง (ฉันเขียนบทคัดย่อครั้งแรกตอนนี้ฉันพยายามจะเป็นตัวอักษร) ผลลัพธ์ตอนนี้คือรันโปรแกรมไม่พิมพ์อะไรเลยจนกว่าโปรแกรมจะจบลงจากนั้นพิมพ์ "เสร็จสมบูรณ์ 100 เปอร์เซ็นต์" ในบรรทัดเดียว หากไม่มีการคืนแคร่ (แต่มีเครื่องหมายจุลภาคครึ่งหนึ่งของคำแนะนำของ …
89 python  stdout 

6
อ่านอย่างต่อเนื่องจาก STDOUT ของกระบวนการภายนอกใน Ruby
ฉันต้องการเรียกใช้เครื่องปั่นจากบรรทัดคำสั่งผ่านสคริปต์ทับทิมซึ่งจะประมวลผลผลลัพธ์ที่ได้รับจากเครื่องปั่นทีละบรรทัดเพื่ออัปเดตแถบความคืบหน้าใน GUI ไม่สำคัญจริงๆที่เครื่องปั่นเป็นกระบวนการภายนอกที่ฉันต้องอ่าน stdout ดูเหมือนว่าฉันไม่สามารถจับข้อความความคืบหน้าเครื่องปั่นที่พิมพ์ไปยังเชลล์ได้ตามปกติเมื่อกระบวนการเครื่องปั่นยังคงทำงานอยู่และฉันได้ลองหลายวิธีแล้ว ฉันดูเหมือนจะเข้าถึง stdout ของเครื่องปั่นเสมอหลังจากที่เครื่องปั่นเลิกทำงานไม่ใช่ในขณะที่ยังทำงานอยู่ นี่คือตัวอย่างของความพยายามที่ล้มเหลว รับและพิมพ์ 25 บรรทัดแรกของผลลัพธ์ของเครื่องปั่น แต่หลังจากออกจากกระบวนการเครื่องปั่นแล้วเท่านั้น: blender = nil t = Thread.new do blender = open "| blender -b mball.blend -o //renders/ -F JPEG -x 1 -f 1" end puts "Blender is doing its job now..." 25.times { puts blender.gets} แก้ไข: เพื่อให้ชัดเจนขึ้นเล็กน้อยคำสั่งที่เรียกใช้เครื่องปั่นจะส่งกระแสข้อมูลกลับมาในเชลล์ซึ่งระบุความคืบหน้า (ส่วนที่ …
86 ruby  shell  process  stdout  stdin 

9
'\ 0' และ printf () ใน C
ในหลักสูตรเบื้องต้นของ C ฉันได้เรียนรู้ว่าในขณะที่การจัดเก็บสตริงจะถูกเก็บไว้ด้วยตัวละคร null \0เมื่อสิ้นสุดมัน แต่ถ้าฉันต้องการที่จะพิมพ์สตริงพูดprintf("hello")แม้ว่าฉันจะพบว่ามันไม่ได้จบลงด้วย\0คำสั่งต่อไปนี้ printf("%d", printf("hello")); Output: 5 แต่นี่ดูเหมือนจะไม่สอดคล้องกันเท่าที่ฉันรู้ว่าตัวแปรเช่นสายอักขระถูกเก็บไว้ในหน่วยความจำหลักและฉันเดาว่าในขณะที่พิมพ์บางอย่างมันอาจถูกเก็บไว้ในหน่วยความจำหลักแล้วทำไมจึงแตกต่างกัน
21 c  printf  stdout  c-strings 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.